「nfq_get_payload(nfqData、&データ)を使用すると、それから、 'データ'を印刷して、私が得るのはEです。ペイロードを取得するために何か他のものがありますか?nfq_get_payloadからデータを取得する
ret = nfq_get_payload(nfqData, &data);
if (ret >= 0)
printf("payload_len=%d \nPayload: %s", ret, data);
「nfq_get_payload(nfqData、&データ)を使用すると、それから、 'データ'を印刷して、私が得るのはEです。ペイロードを取得するために何か他のものがありますか?nfq_get_payloadからデータを取得する
ret = nfq_get_payload(nfqData, &data);
if (ret >= 0)
printf("payload_len=%d \nPayload: %s", ret, data);
データパラメータの型はchar **です。この場合、char型のリストへのポインタと考えることができます。コールは、データをパケットの文字のリストに設定します。しかし、たとえ "c string"もchar *型であっても、ここに返されるデータはNULLが埋め込まれているため、c-stringではありません。 %sで印刷しようとすると、最初のヌルまでしかデータが得られません。
IP packet headerの最初のバイトはほぼ常に0x45で、ASCIIでは文字 'E'であるため、IPパケットが届いていると思います。これに続いてTOSフィールドが続きます。ほとんどの場合、0またはNULLです。この0x45,0x00は有効なC-文字列であり、あなたはE.に
を取得しているなぜあなたは本当にループカウンタや印刷などのパケットの各バイトを戻り値、RETを、使用したいされています
for (int i = 0; i < ret; i++) {
printf(" 0x%1X ", data[i]);
}
バッファの印刷については、Why does printf not print out just one byte when printing hex?を参照してください。