首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# SharpPcap问题

C# SharpPcap问题
EN

Stack Overflow用户
提问于 2011-01-04 15:58:26
回答 2查看 3.9K关注 0票数 2

我一直对使用SharpPcap很感兴趣,但到目前为止还不太顺利。

主要问题是以下代码:

代码语言:javascript
复制
   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);

代码语言:javascript
复制
    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)
                );
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-06 14:13:49

解决方案:

代码语言:javascript
复制
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)
            );
}
票数 3
EN

Stack Overflow用户

发布于 2011-01-04 16:01:29

看看代码的第一部分..。

代码语言:javascript
复制
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
   {
        if(packet is TCPPacket)
        {    

包似乎是CaptureEventArgs类型,而不是TCPPacket类型。可能是事件args的一些属性,这是您的实际数据包。如果这是正确的,那么

"'SharpPcap.CaptureEventArgs‘不包含'Timeval’的定义,也找不到接受'SharpPcap.CaptureEventArgs‘类型的第一个参数的扩展方法'Timeval’“

由于这个原因,可能是正确的;CaptureEventArgs和包不是一回事。

编辑:

我会尝试这样的方法:

代码语言:javascript
复制
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);
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4595628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档