我一直对使用SharpPcap很感兴趣,但到目前为止还不太顺利。
主要问题是以下代码:
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
if(packet is TCPPacket)
{
DateTime time = packet.Timeval.Date;
int len = packet.PcapHeader.len;
TCPPacket tcp = (TCPPacket)packet;
string srcIp = tcp.SourceAddress;
string dstIp = tcp.DestinationAddress;
int srcPort = tcp.SourcePort;
int dstPort = tcp.DestinationPort;
Console.WriteLine("{0}:{1}:{2},
{3} Len={4} {5}:{6} -> {7}:{8}",
time.Hour, time.Minute, time.Second,
time.Millisecond, len, srcIp, srcPort,
dstIp, dstPort);
}
}“找不到类型或命名空间TCPPacket”
好的,所以我想一定是TcpPacket?-but,然后出现了以下错误:
“给定的表达式从来不属于提供的('PacketDotNet.TcpPacket')类型”
忽略了这一点:
"'SharpPcap.CaptureEventArgs‘不包含'Timeval’的定义,也找不到接受'SharpPcap.CaptureEventArgs‘类型的第一个参数的扩展方法'Timeval’“
以此类推等等。所以我的问题是,我是不是遗漏了什么?
我有PacketDotNet和SharpPcap库,并添加了两个using语句。
解决方案: Packet pack = Packet.ParsePacket(packet.Packet);TcpPacket tcpPacket = TcpPacket.GetEncapsulated(pack);
DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;
if (tcpPacket != null)
{
IpPacket ipPacket = (IpPacket)tcpPacket.ParentPacket;
IPAddress srcIp = ipPacket.SourceAddress;
IPAddress dstIp = ipPacket.DestinationAddress;
ushort srcPort = tcpPacket.SourcePort;
ushort dstPort = tcpPacket.DestinationPort;
MessageBox.Show(String.Format("{0}:{1}:{2},{3} Len={4} {5}:{6} -> {7}:{8}",
time.Hour, time.Minute, time.Second, time.Millisecond, len,
srcIp, srcPort, dstIp, dstPort)
);
}发布于 2011-01-06 14:13:49
解决方案:
Packet pack = Packet.ParsePacket(packet.Packet);
TcpPacket tcpPacket = TcpPacket.GetEncapsulated(pack);
DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;
if (tcpPacket != null)
{
IpPacket ipPacket = (IpPacket)tcpPacket.ParentPacket;
IPAddress srcIp = ipPacket.SourceAddress;
IPAddress dstIp = ipPacket.DestinationAddress;
ushort srcPort = tcpPacket.SourcePort;
ushort dstPort = tcpPacket.DestinationPort;
MessageBox.Show(String.Format("{0}:{1}:{2},{3} Len={4} {5}:{6} -> {7}:{8}",
time.Hour, time.Minute, time.Second, time.Millisecond, len,
srcIp, srcPort, dstIp, dstPort)
);
}发布于 2011-01-04 16:01:29
看看代码的第一部分..。
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
if(packet is TCPPacket)
{ 包似乎是CaptureEventArgs类型,而不是TCPPacket类型。可能是事件args的一些属性,这是您的实际数据包。如果这是正确的,那么
"'SharpPcap.CaptureEventArgs‘不包含'Timeval’的定义,也找不到接受'SharpPcap.CaptureEventArgs‘类型的第一个参数的扩展方法'Timeval’“
由于这个原因,可能是正确的;CaptureEventArgs和包不是一回事。
编辑:
我会尝试这样的方法:
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
if(packet.packet is TCPPacket)
{
TCPPacket tcpPack = (TCPPacket)(packet.packet);
DateTime time = tcpPack.Timeval.Date;
int len = tcpPack.PcapHeader.len;
string srcIp = tcpPack.SourceAddress;
string dstIp = tcpPack.DestinationAddress;
int srcPort = tcpPack.SourcePort;
int dstPort = tcpPack.DestinationPort;
Console.WriteLine("{0}:{1}:{2},
{3} Len={4} {5}:{6} -> {7}:{8}",
time.Hour, time.Minute, time.Second,
time.Millisecond, len, srcIp, srcPort,
dstIp, dstPort);
}
}https://stackoverflow.com/questions/4595628
复制相似问题