Ich habe mich sehr für die Verwendung SharpPcap interessiert, aber bisher ist es nicht gut gelaufen.C# SharpPcap Probleme
Das Hauptproblem ist der folgende Code:
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);
}
}
"The type or namespace TCPPacket could not be found"
OK, so dachte ich, es muss TcpPacket sein? -aber dann kam es mit diesem Fehler auf:
"The given expression is never of the provided ('PacketDotNet.TcpPacket') type"
ignorierend, dass:
"'SharpPcap.CaptureEventArgs' does not contain a definition for 'Timeval' and no extension method 'Timeval' accepting a first argument of type 'SharpPcap.CaptureEventArgs' could be found"
Und so weiter, und so weiter. Also meine Frage ist, vermisse ich etwas?
Ich habe die PacketDotNet und SharpPcap-Bibliothek, und fügte die using-Anweisungen.
Lösung: Paket 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)
);
}
Ooh Recht, ich vergaß zu erwähnen, dass ich packet.Packet versucht, das scheint sei das eigentliche Paket. Das hat aber nichts geändert. – Nick
wie überall, wo Sie das Wort Paket haben (mit Ausnahme der Funktion Header) Sie haben die Worte "packet.packet"? – GWLlosa
Ja: if (packet.Packet == TcpPacket) { DateTime Zeit = packet.Packet.Timeval.Date; int len = packet.Packet.PcapHeader.len; TcpPacket tcp = (TcpPacket) packet.Packet; – Nick