Вопрос
Я был очень заинтересован в использовании Sharppcap, но пока это не прошло хорошо.
Основная проблема - следующий код:
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? -ка, тогда это придумала эту ошибку:
«Данное выражение никогда не имеет типа« packetdotnet.tcppacket ') »
Игнорируя это:
«Sharppcap.captureEventargs 'не содержит определения для« TimeVal », и метод расширения« TimeVal ».
И так далее, и так далее. Итак, мой вопрос: я что -то упускаю?
У меня есть библиотека PacketDotnet и SharppCAP, и я добавлял оба использования операторов.
Решение: 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)
);
}
Решение
Решение:
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)
);
}
Другие советы
Глядя на первую часть кода ...
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
if(packet is TCPPacket)
{
Пакет, кажется, имеет тип CaptureEventargs, а не TCPPACKET. Вероятно, есть какая -то свойство мероприятия Args, которое является вашим фактическим пакетом. Если это правильно, то
«Sharppcap.captureEventargs 'не содержит определения для« TimeVal », и метод расширения« TimeVal ».
Вероятно, верно по этой причине; CaptureEventargs и пакет - это не одно и то же.
РЕДАКТИРОВАТЬ:
Я бы попробовал что -то вроде:
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);
}
}