C# SharpPcap-从数据包获取信息
我试图从数据包中获取信息,比如使用SharpPcap和PacketDotNet获取/发布请求。我在这里查看了有关stackoverflow的不同信息,但我有编码问题。数据包中的信息并没有在每个编码系统中正确显示 我的代码如下:C# SharpPcap-从数据包获取信息,c#,hex,packet-sniffers,sharppcap,packetdotnet,C#,Hex,Packet Sniffers,Sharppcap,Packetdotnet,我试图从数据包中获取信息,比如使用SharpPcap和PacketDotNet获取/发布请求。我在这里查看了有关stackoverflow的不同信息,但我有编码问题。数据包中的信息并没有在每个编码系统中正确显示 我的代码如下: using System.Text; using System.Threading; using PacketDotNet; using SharpPcap; using System; namespace ConsoleApplication2 { class
using System.Text;
using System.Threading;
using PacketDotNet;
using SharpPcap;
using System;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string ver = SharpPcap.Version.VersionString;
Console.WriteLine("SharpPcap {0}", ver);
// Retrieve the device list
CaptureDeviceList devices = CaptureDeviceList.Instance;
ICaptureDevice myDevice = devices[3];
myDevice.OnPacketArrival += new PacketArrivalEventHandler(device_OnPacketArrival);
myDevice.Open(DeviceMode.Promiscuous, 1000);
//Console.WriteLine("trst = {0}", myDevice.MacAddress);
//myDevice.Filter = "tcp and dst host 10.11.16.80";
Console.WriteLine("-- Listening on {0}, hit 'Enter' to stop...",
myDevice.Description);
myDevice.StartCapture();
Console.ReadLine();
myDevice.StopCapture();
myDevice.Close();
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
// парсинг всего пакета
Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
// получение только TCP пакета из всего фрейма
var tcpPacket = TcpPacket.GetEncapsulated(packet);
// получение только IP пакета из всего фрейма
var ipPacket = IpPacket.GetEncapsulated(packet);
if (tcpPacket != null && ipPacket != null)
{
DateTime time = e.Packet.Timeval.Date;
int len = e.Packet.Data.Length;
// IP адрес отправителя
var srcIp = ipPacket.SourceAddress.ToString();
// IP адрес получателя
var dstIp = ipPacket.DestinationAddress.ToString();
// порт отправителя
var srcPort = tcpPacket.SourcePort.ToString();
// порт получателя
var dstPort = tcpPacket.DestinationPort.ToString();
// данные пакета
var hex = BitConverter.ToString(tcpPacket.PayloadData);
hex = hex.Replace("-", "");
byte[] raw = new byte[hex.Length / 2];
for (int i = 0; i < raw.Length; i++)
{
raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
}
string data = Encoding.ASCII.GetString(raw);
Console.WriteLine("{0}:{1}:{2}",srcPort,dstPort, data);
Thread.Sleep(1000);
}
}
}
}
使用System.Text;
使用系统线程;
使用PacketDotNet;
使用sharpcap;
使用制度;
命名空间控制台应用程序2
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串ver=SharpPcap.Version.VersionString;
Console.WriteLine(“sharpcap{0}”,版本);
//检索设备列表
CaptureDeviceList设备=CaptureDeviceList.Instance;
ICaptureDevice myDevice=设备[3];
myDevice.OnPacketArrival+=新的PacketArrivalEventHandler(设备\u OnPacketArrival);
myDevice.Open(DeviceMode.Promiscuous,1000);
//WriteLine(“trst={0}”,myDevice.MacAddress);
//myDevice.Filter=“tcp和dst主机10.11.16.80”;
WriteLine(“--在{0}上侦听,点击“回车”停止…”,
我的设备(说明);
myDevice.StartCapture();
Console.ReadLine();
myDevice.StopCapture();
myDevice.Close();
}
私有静态无效设备\u OnPacketArrival(对象发送方、CaptureEventArgs e)
{
// парсинг всего пакета
Packet Packet=Packet.ParsePacket(e.Packet.LinkLayerType,e.Packet.Data);
//TCP协议
var tcpPacket=tcpPacket.GetEncapsulated(数据包);
//知识产权
var ipPacket=ipPacket.getenclosed(数据包);
if(tcpPacket!=null&&ipPacket!=null)
{
DateTime time=e.Packet.Timeval.Date;
int len=e.Packet.Data.Length;
//知识产权
var srcIp=ipPacket.SourceAddress.ToString();
//知识产权
var dstIp=ipPacket.DestinationAddress.ToString();
// порт отправителя
var srcPort=tcpPacket.SourcePort.ToString();
// порт получателя
var dstPort=tcpPacket.DestinationPort.ToString();
// данные пакета
var hex=BitConverter.ToString(tcpPacket.PayloadData);
十六进制=十六进制。替换(“-”,“”);
字节[]原始=新字节[hex.Length/2];
for(int i=0;i
结果显示在屏幕截图上: