SharpPcap学习笔记2
25 May 2012这节的代码来自官方示例第6个,主要功能是实时获取Tcp/ip数据包的源地址及端口号还有目的地址及其端口号。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using SharpPcap; using PacketDotNet; namespace SharpPcap_Demo { class Program { static void Main(string[] args) { //显示当前SharpPcap版本号 string ver = SharpPcap.Version.VersionString; Console.WriteLine("SharpPcap Version : {0}",ver); //获取网络设备 var devices = LivePcapDeviceList.Instance; if (devices.Count < 1) { Console.WriteLine("No devices were found on this machine"); return; } Console.WriteLine("The following devices are available on this machine:"); Console.WriteLine("----------------------------------------------------"); int i = 0; foreach (LivePcapDevice dev in devices) { Console.WriteLine("{0} {1} {2}",i,dev.Name,dev.Description); i++; } //选择一个要监听的设备 Console.Write("Please choose a device to capture:"); i = int.Parse(Console.ReadLine()); LivePcapDevice device = devices[i]; device.OnPacketArrival += new PacketArrivalEventHandler(DeviceOnPacketArrival); int readTimeoutMillisecond = 1000; //开启混杂模式 device.Open(DeviceMode.Promiscuous,readTimeoutMillisecond); //过滤tcp/ip包 string filter = "ip and tcp"; device.SetFilter(filter); Console.WriteLine("The following tcpdump filter will be applied:{0}",filter); Console.WriteLine("Listening on {0},hit 'Ctrl+C' to exit...",device.Description); //开始监听进程,不停止 device.Capture(); //关闭设备 device.Close(); } private static void DeviceOnPacketArrival(object sender, CaptureEventArgs e) { var time = e.Packet.Timeval.Date; var len = e.Packet.Data.Length; var packet = PacketDotNet.Packet.ParsePacket(e.Packet); var tcpPacket = PacketDotNet.TcpPacket.GetEncapsulated(packet); if (tcpPacket != null) { var ipPacket = (PacketDotNet.IpPacket)tcpPacket.ParentPacket; //数据包源地址 System.Net.IPAddress srcIp = ipPacket.SourceAddress; //数据包目的地址 System.Net.IPAddress dstIp = ipPacket.DestinationAddress; //源地址端口 int srcPort = tcpPacket.SourcePort; //目的地址端口 int dstPort = tcpPacket.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); } } } }
转载请注明:于哲的博客 » SharpPcap学习笔记2