問題タブ [libpcap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Ruby/C/Makefile、-lpcap/#include で使用されるデフォルトの pcap.h ファイルは何ですか
Makefile を介してコンパイル/インストールされている C ソースに含まれている pcap.h ファイルを特定するにはどうすればよいですか?
具体的には、次の方法でインストールされる Ruby ライブラリ (pcaprub) です。
extconf.rb は次のとおりです。
c - netfilter でパケットをキャプチャするには?
libpcap を使用して GRE パケットをキャプチャして転送していますが、効率はあまりよくないと思います。
そのため、netfilter を使用して転送を行うことにしましたが、これは初めてです。誰か私にくれませんか
netfilter で IP または GRE パケットをキャプチャする簡単な例は? ありがとう!
c++ - libpcapの速度制限を使用してパケットを送信する
あるNIC(つまり、eth0)から高速(約1Gbps)でイーサネットパケットをキャプチャしpcap_sendpacket()
、別のNIC(つまり、eth1)にトラフィックを転送するプログラムを作成しました。
フォワーダーイーサネットインターフェイスが別のコンピューターNICに接続されていない場合、転送速度が必要ですが、接続すると送信速度が大幅に低下します(900Mbpsから100Mbps)。
誰かが理由を説明できますか?
OS:Kubuntu linux 10.10
言語:C ++
ライブラリ:Libpcap
linux - libpcap setfilter() 関数とパケット損失
これは@stackoverflowでの最初の質問です。
私は一部の VoIP 運用サーバー用の監視ツール、特に Perl の pcap ライブラリを使用して特定のパターンに一致するすべてのトラフィック (VoIP 呼び出し) をキャプチャできるスニフ ツールを作成しています。
「udp」などの貧弱な選択的フィルターを使用して、アプリのコードですべてのフィルタリングを行うことはできません。これは、トラフィックが多すぎて、カーネルがパケット損失の報告に対処できないためです。
次に行うことは、キャプチャ中に可能な限り選択的なフィルターを繰り返し構築することです。最初に、(すべての) SIP シグナリング トラフィックと IP フラグメントのみをキャプチャします (パターン マッチは、どのような場合でもアプリケーション レベルで実行する必要があります)。次に、RTP に関する情報を SIP パケットに見つけたら、「or」句を追加します。特定の IP と PORT を含む実際のフィルター文字列を取得し、setfilter() でフィルターを再設定します。
したがって、基本的には次のようなものです。
初期フィルター : "(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0)" -> すべての SIP トラフィックと IP フラグメントをキャプチャします
更新されたフィルター: "(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0) or (host IP and port PORT)" -> 特定の IP、PORT の RTP もキャプチャします
更新されたフィルター: "(udp and port 5060) or (udp and ip[6:2] & 0x1fff != 0) or (host IP and port PORT) or (host IP2 and port PORT2)" -> 2 番目の RTP ストリームをキャプチャします同じように
等々。
監視目的でRTPストリームの「実際の」パケット損失を取得できるため、これは非常にうまく機能しますが、ツールの選択的フィルターバージョンが不十分な場合、いくつかのパケットがあったため、RTPパケット損失率は信頼できませんでしたカーネルによるパケット ドロップが原因で欠落しています。
しかし、このアプローチの欠点に取り掛かりましょう。
キャプチャ中に setfilter() を呼び出すと、関数 set_kernel_filter() のコード コメントで pcap-linux.c (libpcap バージョン 0.9 および 1.1 を確認) に記載されているように、libpcap が「フィルターの変更中に」受信したパケットをドロップするという事実が含まれます。
setfilter() を呼び出すと、一部のパケットが IP フラグメント化されて到着し、一部のフラグメントが失われます。これは、最後に libpcap 統計によって報告されません: トレースを掘り下げているのを見つけました。
これで、このアクションが libpcap によって行われる理由がわかりましたが、私の場合、パケットをドロップする必要はまったくありません (関係のないトラフィックを取得することは気にしません)。
libpcap のコードを変更していないこの問題を解決する方法について何か考えはありますか?
c++ - std::cout << stringstream.str()->c_str() は何も出力しません
unsigned char && unsigned char の長さを取得する関数で、
結果:
- WAS: 何も出力しません (const.. case へのポインタがあると思います)
- GOOD:印刷データ
- 悪い: 何も印刷しない
- テスト、アサート: mystr.size() が渡された unsigned char サイズと等しいことを出力します。
私は試した:
- string.assign(scp.rdbuf());
- memcpy(文字、scp.str()、10);
- 一時的な文字、文字列を作成/割り当てるさまざまな方法
助けはありません..データを含むstd ::cout 'able std::stringを取得する必要があります(パケットデータであるunsigned charであるfooから選択されました)。
元のfooがヌルで終了していない可能性があるか、問題は次のようなものであると推測します-単純ですが、入ることができません..ここで探すべきものは何ですか?
(このコードは、libpcapp のような既知の C++ マジック ラッパーを使用せずに、C++ の方法でパケットを出力するためだけに、libpcap を使用する別の試みです)。
python - Python2.6 用の libpcap (Windows)
現在、Windows の Python2.6 で libpcap を使用したいと考えています。
Pypcap を試してみましたが、python 2.5 以前のバイナリ ビルドしかありません。pylibpcap にはバイナリ ビルドがないようです。
また、ソースからインストールすることもできません。最初に libpcap をビルドする必要があるようです。
アプリを開発し、それを py2exe を使用してパックしたいのですが、lib が簡単にインストールでき、py2exe と互換性があることを確認したいです。
code-injection - libpcap が pcap_inject() で注入されたパケットをキャプチャするのを妨げる
現在、pcap のみを使用して同じインターフェイスでスニッフィングし、pcap_inject を使用してパケットを注入する可能性を考えています。
この問題は、次のいずれかを使用して簡単に解決できます。
- 永続的なチェックサムの追跡 /大きな低速マップ/,
- チェックサムの追跡 - すべてのデータが注入されるまで (たとえば、最初の http 要求)。
- bpf/libipq/Netfilter をハッキングして、実際の PHY パケットごとに追加のパラメーターを運ぶ
しかし:
pcap が eth0 をリッスンする /実際の状況は「pcap がリッスンし、ソース マジック経由でドロップする」に近い/、pcap は eth0 のハンドルを介してパケットを送信し、ルーティングできるようにします。libpcap が同じライブラリを使用して同じインターフェイスに注入されたパケットをキャプチャしないための理論的根拠は何ですか?たとえば、注入されたパケットはすべての Berkeley のパケット フィルタ コードを通過しませんか?
実技試験未定。
objective-c - root権限でアプリをデプロイする
libpcapを使用してネットワークトラフィックを監視するCocoaアプリを作成しました。libpcapにはroot権限が必要なので、root権限を与えるための最良の方法は何でしょうか(たとえば、Package Makerを使用しますか?)。ドラッグアンドドロップインストーラーを使用してデプロイできますか、それともPackage Makerが唯一のオプションですか?
さらに、アプリにルート権限を与えることによってもたらされるセキュリティリスクについて知りたいです。アプリはディスク(sqliteデータベース)にも書き込みますが、ディスクルート権限に書き込むアプリを与えるのは良い考えではないことを読みました。
perl - Perlネットワークフレーム/パケットパーサー
私は個人的なプロジェクトの一環として小さなスニファーを書いています。私は使用していますNet::Pcap
(本当に本当に素晴らしいツールです)。
パケット処理ループでは、Net::Frame
すべてのヘッダーを解凍してデータを取得するために優れた機能を使用しています。これはそれほど効率的ではないかもしれないと心配しています(Net::Frame
素晴らしいですが、このプロジェクトに必要な以上のようです)。
また、一部のDebianシステムでは、libdumbnetを手動でコンパイルする必要があったことも嫌いです(公式のaptリポジトリで提供されているパッケージは機能してNet-Libdnet-0.92
いないようで、気に入らなかった)。
私が欲しいのは、TCPセグメント内のペイロードを取得することです。代替手段はありますか?ありがとうございました。
PSパケットを受け取ってパターンを検索しただけでは、本当に悪いことでしょうか(「thedailywtf.comに値する」を読んでください)。
c++ - pcap_set_rfmon が機能しない?
デバイスをモニター モードに設定しようとしていますが、「iwconfig wlan0 モード モニター」を実行してモニター モードにできることはわかっています。コードを実行すると、どこからでもパケットをキャプチャできます。
問題は、libpcap で (上記のコマンド ラインを入力せずに) デバイスを監視モードに設定できないことです。手動でアクセス ポイントに接続するまで、パケットをキャプチャできません。
これはコードの問題ですか、それとも pcap ライブラリの問題ですか?コマンド ラインを使用せずにデバイスを監視モードに設定した人はいますか?私は Realtek2500 を使用しています。