2014-07-07 4 views
2

나는 pcap.net을 실험 중이며 연습으로 핑에 응답하는 것을 구현하려고합니다. 운영체제는 이미 그들에게 응답하지만, 중복을 생성하는 것은 괜찮습니다. 첫 번째 단계는 분명히 ping 패킷이 도착했음을 알 수 있습니다. https://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Opening%20an%20adapter%20and%20capturing%20the%20packets&referringTitle=Pcap.Net%20User%20Guide에서 예제를 수정하여 다음 처리기를 사용했습니다.pcap.net에서 icmp 패킷 캡처

캡쳐 된 패킷 중 어느 것도 올바른 서브넷에 있지 않기 때문에 어떤 일이 발생하는지 분명히 알지 못합니다. ping -i 0을 사용하면 수신 된 패킷 수가 대폭 증가하지만 (여전히 IP 주소는없고 echo 요청 패킷으로 보이지 않음) 핑 패킷을 대상 IP로 보내면 아무런 차이가 없습니다.

내가 뭘 잘못하고 있니?

private static void PacketHandler(Packet packet) 
    { 
     IpV4Address dst = packet.IpV4.Destination, src = packet.IpV4.Source; 

     if (dst == null || src == null) return;    

     if (packet.IpV4.Icmp != null) 
     {     
      Console.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Length+" "+src+" -> "+dst); 

     } 
    } 

답변

2

필자가 작성하려고했던 것은 분명히 다음과 같습니다. 들어오고 나가는 icmp 에코 요청을 안정적으로 수신합니다. 나는 왜 내가이 컴퓨터를 실행하는 컴퓨터에 rdesktop-ed를 할 때 TCP 패킷이 지나가는지를 보지 못한다. 하지만 내가하고 싶은 일에 충분히 잘 작동하는 것 같습니다.

private static void PacketHandler(Packet packet) 
    { 
     if (packet.DataLink.Kind != DataLinkKind.Ethernet) return;    
     EthernetDatagram ed = packet.Ethernet; 

     if (ed.EtherType != EthernetType.IpV4) return; 
     IpV4Datagram ipv4 = ed.IpV4; 

     if (ipv4.Protocol != IpV4Protocol.InternetControlMessageProtocol) return; 
     IcmpDatagram icmp = ipv4.Icmp; 

     IpV4Address dst = ipv4.Destination, src = ipv4.Source; 

     Console.WriteLine(" length:" + packet.Length + " " + src + " -> " + dst + " " + icmp); 
    }