Мне было очень интересно использовать 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"
ОК, поэтому японял, что это должен быть TcpPacket?но тогда возникла ошибка:
"Данное выражение никогда не относится к указанному типу ('PacketDotNet.TcpPacket')"
Игнорирование этого:
"SharpPcap.CaptureEventArgs" не содержит определения для Timeval, и не найден метод расширения "Timeval", принимающий первый аргумент типа "SharpPcap.CaptureEventArgs" "
И так далее, и так далее.Итак, мой вопрос: я что-то упустил?
У меня есть библиотеки PacketDotNet и SharpPcap, и я добавил оба оператора using.
Решение: 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)
);
}