1

Linux(centos)のCでlibpcapを使用しています。このガイドに従って、パケット全体をASCIIで出力したいのですが、「my_callback」にu_char*をキャストすることでパケットを機能させることができました。 " 働き。しかし、データの長さを取得する方法がわかりません。strstrは機能しませんでした。ヘッダーには、サイズを取得するためにアクセスできるlenメンバーがありますが、渡される*packetに類似したものは見つかりません。どんな助けでも大歓迎です。

4

2 に答える 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 に答える