Linux(centos)のCでlibpcapを使用しています。このガイドに従って、パケット全体をASCIIで出力したいのですが、「my_callback」にu_char*をキャストすることでパケットを機能させることができました。 " 働き。しかし、データの長さを取得する方法がわかりません。strstrは機能しませんでした。ヘッダーには、サイズを取得するためにアクセスできるlenメンバーがありますが、渡される*packetに類似したものは見つかりません。どんな助けでも大歓迎です。
3749 次
2 に答える
3
コールバックでは、pkthdr変数のcaplenメンバー(struct pcap_pkthdrを参照)に、キャプチャされたパケットのサイズが含まれています。
たとえば、パケットがキャプチャされたと仮定します。フレームの全長は1024バイトです。ただし、キャプチャドライバは、フレームの最初の128バイトのみをキャプチャし、コールバックで使用できるようにしました。
この場合、pkthdr-> caplenは128で、header->lenは1024であると期待する必要があります。
于 2010-04-07T17:39:01.450 に答える
1
合計パケットサイズは、ipヘッダー(http://en.wikipedia.org/wiki/IPv4_header#Total_Length)の「totallength」フィールドにあります。
libpcapを使用してその値を取得する方法は、次の例にあります:http ://www.tcpdump.org/sniffex.c
この変数から「全長」(ip_lenという名前)を参照するフィールドの値を取得する必要があります。
const struct sniff_ip *ip; /* The IP header */
于 2013-07-15T11:01:37.960 に答える