私は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' の定義が含まれておらず、タイプ 'SharpPcap.CaptureEventArgs' の最初の引数を受け入れる拡張メソッド 'Timeval' が見つかりませんでした」
などなど。だから私の質問は、何かが足りないのですか?
私は PacketDotNet と SharpPcap ライブラリを持っており、両方の using ステートメントを追加しました。
解決策: パケット パック = Packet.ParsePacket(packet.Packet); TcpPacket tcpPacket = TcpPacket.GetEncapsulated(パック);
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)
);
}