Frage
Ich war sehr daran interessiert, sie zu verwenden Sharppcap, Aber bisher ist es nicht gut gelaufen.
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);
}
}
"Der Typ- oder Namespace -TCPPacket konnte nicht gefunden werden"
Ok, also dachte ich, es muss tcPPacket sein? -Dann kam es zu diesem Fehler:
"Der angegebene Ausdruck ist nie vom Typ ('packetdotNet.tcppacket') type"
Das ignorieren:
"'Sharppcap.CaptureEventArgs' enthält keine Definition für 'TimeVal' und keine Erweiterungsmethode 'TimeVal', die ein erstes Argument vom Typ 'Sharppcap.CaptureEventArgs' akzeptiert.
Und so weiter und so weiter. Meine Frage ist also, fehlt mir etwas?
Ich habe die Paketdotnet- und SharppCap -Bibliothek und habe beide die Verwendung von Anweisungen hinzugefügt.
Lösung: paketpack = packet.parsepacket (packet.packet); TCPPACKET TCPPACKET = TCPPACKET.GETECAPSULDS (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)
);
}
Lösung
Lösung:
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)
);
}
Andere Tipps
Betrachten Sie den ersten Teil des Codes ...
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
if(packet is TCPPacket)
{
Das Paket scheint von Typ CaptureEventargs, nicht tcPPacket zu sein. Wahrscheinlich gibt es eine Eigenschaft der Event -Argumente, die Ihr eigentliches Paket sind. Wenn das richtig ist, dann die
"'Sharppcap.CaptureEventArgs' enthält keine Definition für 'TimeVal' und keine Erweiterungsmethode 'TimeVal', die ein erstes Argument vom Typ 'Sharppcap.CaptureEventArgs' akzeptiert.
Ist wahrscheinlich aus diesem Grund wahr; Die CaptureEventargs und das Paket sind nicht dasselbe.
BEARBEITEN:
Ich würde so etwas versuchen wie:
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);
}
}