2013-09-25 1 views
2

하나의 컴퓨터에서 포트 8888을 통해 함께 작동하는 2 개의 소프트웨어가 있는데 어떻게 작동하는지 알고 싶습니다.windows7에서 pcapdotnet 어떻게 장치 또는 IP 0.0.0.0 지정하지 않고 포트를 스니퍼?

나는 pcapdotnet을 다운로드하고 http://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20User%20Guide&referringTitle=Home 에 샘플 코드를 시험해 본다. 로컬 네트워크에서는 모든 메시지를 볼 수 있지만 나에게는 그렇지 않다.

netstat -a를 사용합니다. "TCP 0.0.0.0:8888 ZC01N00278 : 0 LISTENING" 저는이 0.0.0.0에 대해 혼란스러워합니다.

그래서 모든 네트워크 장치를 사용할 수 없도록 설정 했으므로 (적어도 하나의 장치가 필요하기 때문에 내 pcap이 작동하지 않을 수 있지만) 여전히 거기에 있습니다. 나는 이더넷없이 2 개의 소프트웨어 통신을 서로 마주하고 있다고 생각하니, 맞습니까?

나는이 포트에서 패킷을 가져올 수있는 소켓의 초보자입니까? 코드는 다음과 같습니다. 주로 튜토리얼 샘플입니다.

using System; 
using System.Collections.Generic; 
using PcapDotNet.Core; 
using PcapDotNet.Packets; 
using PcapDotNet.Packets.IpV4; 
using PcapDotNet.Packets.Transport; 
using System.IO; 

namespace pcap_test1 
{ 
    class Program 
    { 
     static StreamWriter sw; 
     static void Main(string[] args) 
     { 
      sw = new StreamWriter(@"C:\sunxin\pcap.txt"); 
      // Retrieve the device list from the local machine 
      IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine; 

      if (allDevices.Count == 0) 
      { 
       Console.WriteLine("No interfaces found! Make sure WinPcap is installed."); 
       return; 
      } 

      // Print the list 
      for (int i = 0; i != allDevices.Count; ++i) 
      { 
       LivePacketDevice device = allDevices[i]; 
       Console.Write((i + 1) + ". " + device.Name); 
       if (device.Description != null) 
        Console.WriteLine(" (" + device.Description + ")"); 
       else 
        Console.WriteLine(" (No description available)"); 
      } 

      int deviceIndex = 0; 
      do 
      { 
       Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):"); 
       string deviceIndexString = Console.ReadLine(); 
       if (!int.TryParse(deviceIndexString, out deviceIndex) || 
        deviceIndex < 1 || deviceIndex > allDevices.Count) 
       { 
        deviceIndex = 0; 
       } 
      } while (deviceIndex == 0); 

      // Take the selected adapter 
      PacketDevice selectedDevice = allDevices[deviceIndex - 1]; 

      // Open the device 
      using (PacketCommunicator communicator = 
       selectedDevice.Open(65536,         // portion of the packet to capture 
       // 65536 guarantees that the whole packet will be captured on all the link layers 
            PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode 
            1000))         // read timeout 
      { 
       // Check the link layer. We support only Ethernet for simplicity. 
       if (communicator.DataLink.Kind != DataLinkKind.Ethernet) 
       { 
        Console.WriteLine("This program works only on Ethernet networks."); 
        return; 
       } 

       // Compile the filter 
       using (BerkeleyPacketFilter filter = communicator.CreateFilter("port 8888")) 
       { 
        // Set the filter 
        communicator.SetFilter(filter); 
       } 

       Console.WriteLine("Listening on " + selectedDevice.Description + "..."); 

       // start the capture 
       communicator.ReceivePackets(0, PacketHandler); 
      } 
     } 

     // Callback function invoked by libpcap for every incoming packet 
     private static void PacketHandler(Packet packet) 
     { 
      // print timestamp and length of the packet 
      Console.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Ethernet); 
      sw.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + packet.Ethernet); 

      IpV4Datagram ip = packet.Ethernet.IpV4; 
      UdpDatagram udp = ip.Udp; 
      for (int i = ip.HeaderLength; i < packet.Length; ++i) 
      { 
       Console.Write(Convert.ToChar(packet.Buffer[i])); 
       sw.Write(Convert.ToChar(packet.Buffer[i])); 
      } 
      Console.WriteLine(); 
      sw.WriteLine(); 
      // print ip addresses and udp ports 
      //Console.WriteLine(ip.Source + ":" + udp.SourcePort + " -> " + ip.Destination + ":" + udp.DestinationPort); 
      //sw.WriteLine(ip.Source + ":" + udp.SourcePort + " -> " + ip.Destination + ":" + udp.DestinationPort); 
      sw.Flush(); 
     } 
    } 
} 

답변