0

IPv4、IPv6、TCP、UDP、IP、ICMPなどのパケットをキャプチャして識別し、その内容を表示できるパケットスニファを作成する大学(ネットワークエンジニアリング)のコースのプロジェクトが与えられました。

当初、これを行うためにlibpcapを使用するように指示されましたが、大学の技術者の1人から、現在のインストール(Arch linux)ではlibpcapを使用できないことが通知されました。

libpcapを使用しないCでパケットスニファを作成する他の方法はありますか?

私はこのプロジェクトへの答えを求めているのではなく、方向性を求めているだけです。どこから始めればよいのでしょうか。

4

3 に答える 3

5

私は行って、あなたが実際に何をしているのか、もっと先輩に聞いてみます。ここには2つのまったく異なるタスクがあるようです。1つはネットワークパケットの解析と表示であり、もう1つはパケットをキャプチャするためにOS/ハードウェアとインターフェイスすることです。あなたが前者について学ぶことになっているなら、あなたはおそらく後者に時間を費やすべきではありません。

于 2011-07-18T22:03:09.570 に答える
3

当初、これを行うためにlibpcapを使用するように指示されましたが、大学の技術者の1人から、現在のインストール(Arch linux)ではlibpcapを使用できないことが通知されました。

私が最初にアドバイスするのは、コースの講師から直接回答を得ることです。技術者がlibpcapが利用できないことを意味する場合は、問題なく、コンパイルできるはずです。技術者が(Archまたは大学が)Linuxカーネルからプロミスキャスモードドライバーを削除したことを意味する場合、できることはたくさんありません。いずれにせよ、あなたが聞いていることを確認してください。

それでもこれを行う必要がある場合は、ガイダンスのためにlibpcapソースを読むことの何が問題になっていますか?構造体からpcap_loop呼び出す、探している関数です。libpcapの低レベルでいくつかの可能なリーダーを明らかにします:read_oppcap_tgrep -irn "read_op = " *

grep -irn "read_op = " *
pcap-bpf.c:2231:    p->read_op = pcap_read_bpf;
pcap-bt-linux.c:172:    handle->read_op = bt_read_linux;
pcap.c:243: p->read_op = (read_op_t)pcap_not_initialized;
pcap-can-linux.c:99:    handle->read_op = can_read_linux;
pcap-dag.c:795: handle->read_op = dag_read;
pcap-dlpi.c:759:    p->read_op = pcap_read_dlpi;
pcap-libdlpi.c:217: p->read_op = pcap_read_libdlpi;
pcap-linux.c:1198:  handle->read_op = pcap_read_linux;
pcap-linux.c:3167:  handle->read_op = pcap_read_linux_mmap;
pcap-netfilter-linux.c:338: handle->read_op = nflog_read_linux;
pcap-nit.c:315: p->read_op = pcap_read_nit;
pcap-pf.c:486:  p->read_op = pcap_read_pf;
pcap-septel.c:213:  handle->read_op = septel_read;
pcap-sita.c:941:    handle->read_op = pcap_read_acn;
pcap-snf.c:236: p->read_op = snf_read;
pcap-snit.c:394:    p->read_op = pcap_read_snit;
pcap-snoop.c:381:   p->read_op = pcap_read_snoop;
pcap-usb-linux.c:341:           handle->read_op = usb_read_linux_mmap;
pcap-usb-linux.c:355:       handle->read_op = usb_read_linux_bin;
pcap-usb-linux.c:390:       handle->read_op = usb_read_linux;
pcap-win32.c:687:       p->read_op = pcap_read_win32_dag;
pcap-win32.c:694:       p->read_op = pcap_read_win32_npf;
savefile.c:323: p->read_op = pcap_offline_read;

システムがどちらを使用するかは、おそらくの結果によって異なりますconfigureが、それらのいずれも、システムがどのように機能するかを理解するための優れた出発点として機能します。このような大きなプロジェクトを分解することを恐れないでください-他の誰かが「グーグルはあなたの友達です」と言いました。grepさて、あなたの友達だと思います。

于 2011-07-18T22:11:11.570 に答える
-1

WireSharkを使ってみませんか?ArchLinux用のパッケージがあり、操作するのは本当に楽しいです。私はそれを自分で使用しましたが、良好な結果が得られました。

https://wiki.archlinux.org/index.php/Wireshark

于 2011-07-18T22:01:22.700 に答える