• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cでのパケットキャプチャについて)

Cでのパケットキャプチャについて

このQ&Aのポイント
  • Cでのネットワークプログラミングを少々かじっている者です。とりあえず完成しているプログラムを見て勉強しようと思い、パケットキャプチャのサンプルプログラムを動かそうと考えてコンパイルしたのですが、どうもうまく動かない部分があります。
  • ソケットを生成する箇所で、下のようなソースを書いたのですが、その中の「AF_PACKET」と「ETH_P_ALL」が私の使っている環境になく、そこでどうしても止まってしまいます。int rawsock = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;
  • インポートしているヘッダファイルは以下の通りです。現在の動作環境は以下の通りです。OS : FreeBSD 9.2コンパイラ : gcc 4.2.1 FreeBSDそのものが違う様式を採用しているわけではないとは思うのですが・・・。ただ、構造体の変数やそのメンバが異なっていた部分も結構あったので、釈然としない所もあります。何かこれらの代わりに使えるようなものはあるのでしょうか。それとも、FreeBSDではこれは無理、とか根本的な要因でもあるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1さんの回答通り、それはLinuxでのパケットキャプチャーの方法だと思います。こういうOSに近いところについて調べるときはOSの名前も一緒に入れて検索したほうがよいです。 *BSDではBerkeley Packet Filter (BPF)を使います。 ざっと検索したら、こんな例を見つけました。 https://gist.github.com/msantos/939154 あと、パケットを書き換えたいとしたら、natdの真似事をするというのもあるかもしれないですね。 パケットキャプチャーでOS関係なく実装する場合はpcapを使ったほうがよいでしょうね。 pcapがその違いを吸収してくれると思うので。

akibingo261
質問者

お礼

やはりOSの違いというのが問題になるんですね。 私の認識不足でした。 さらに幅広く知識も増やしていこうと思います。 アドバイスと例まで示してくださり、ありがとうございました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

参考にされたサイトの例は全てLinux系なのでは? パケットキャプチャのやり方は統一されてるわけではないのでどのOSでも同じやり方でできるというわけではないです。 FreeBSDの場合は、bpfを使ってください。 FreeBSD版のpcapもbpfを使って実装されてます。 なのでサイトに例がなくてもpcapのソースで勉強するという手もあります。

akibingo261
質問者

お礼

確かにブックマークしたサイトを見たらLinuxのプログラミングでした。 UNIX系OSなら全部いけるだろうと思っていたので、そのあたりの知識がかなり欠けているようです・・・。 素早い回答とヒントも与えて下さり、ありがとうございました。

関連するQ&A