これは私の最初のCアプリですので、いくつかの無知をお許しください。私はスピードの理由から、Pythonベースのlibpcap
アプリケーションをC言語に移植しています。パケットから情報を抽出する方法を理解している問題があります。それはu_char
として私のハンドラ関数に来る、そしてそこからそれをmungeすることができます。 Pythonでは、私は単に "文字列"をスライスし、そのように私の情報を抽出するだろうが、私はどのように進めるか分からない。Cポインタとメモリ(PCAP&パケット処理)
たとえば、イーサネットフレーム(それぞれ0〜6バイトと7〜11バイト)から宛先MACアドレスと送信元MACアドレスを抽出します。今私が持っている:
void handle_sniffed(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) {
u_char *mac_dst = malloc(6*sizeof(u_char));
u_char *mac_src = malloc(6*sizeof(u_char));
memcpy(mac_dst, packet, 6);
memcpy(mac_src, packet+6, 6);
}
は、私はこれを正しくやっているし、今どのように私はprintf
を使用して、たとえば、MACアドレスを表示していますか?
私はちょうどボグ標準イーサネットフレームをキャプチャしています。私はそれを構造体にキャストすることができることを理解しています。そして、私にとってそれは "簡単な"方法です(C言語でもそれを行うには賢い方法だと確信しています)。私は、そのキャストを含むhttp://www.tcpdump.org/pcap.htmlの指示に従っています。私は基本的にPythonコードの1:1ポートを実行したかったので、C言語でもっと多くの作業をしなくてはなりませんでした。これは過去に私の頭を包み込むことができなかったことでした。 – axon
これは、ハードコアの練習方法です。 –
複雑なメモリアクセスを受け入れる方法は、キャストから構造への方法でしょうか?この場合だけでなく、ほとんどの場合ですか? – axon