問題タブ [pcap]

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.

0 投票する
1 に答える
3243 参照

tcp - libnid を使用した TCP ストリームのキャプチャとアセンブル

私は単純なスニファーツールを書いています。私は libpcap から始めましたが、TCP ストリーム情報を追跡することが有用であることに気づき、libnid について読み、実験するようになりました。

これは優れたツールですが、特定のストリームの TCP ハンドシェイク (SYN、SYN/ACK、ACK) を目撃しない場合、ストリームの内部ハッシュ テーブルに新しいレコードを作成しません。その結果、ハンドシェイクが発生する前にスニファを開始しない限り、多くのデータを表示できません。ドキュメントが少し不足しています。この制限を回避できるかどうかは誰にもわかりませんか?

0 投票する
1 に答える
250 参照

c - インバウンドデータグラムを検出する C pcap

CI では、データグラム ソケット (AF_INET、SOCK_DGRAM) を INADDR_ANY にバインドします。次に、このソケットを定期的に使用してデータグラムを送受信し、pcap でパケットの流れを監視します。問題は、pcap を使用してパケットが着信か発信かを判断できないことです。

送受信と pcap 監視は別々のスレッドで実行されており、同期のため通信できません。送信されたパケットではなく、着信パケットのみを追跡したいのですが、どうすればそれができるかについて誰か考えがありますか?

宛先 IP アドレスをテストすることは既に考えていましたが、ローカル IP を取得する方法がわかりません。これが実行されているマシンには静的IPがなく、割り当てられたドメイン名ははるかに少なく、INADDR_ANYにバインドされたソケットではgetsocknameが機能しないようです。また、ioctl(sockfd, SIOCGIFCONF, &buffer) を使用してみましたが、どちらも機能しませんでした - buffer.ifc_len=0 を設定します。

0 投票する
2 に答える
816 参照

filter - WinPcap で自分のパケットを無視するには?

WinPcap 経由でパケットを挿入すると、その瞬間にキャプチャされます。パケットをキャプチャしたくありません。魔女は自分で注射されました。最も簡単な方法は何ですか?

0 投票する
2 に答える
894 参照

c# - C# の Pcap を使用したパケット ロギング

現在、C# 用の pcap ライブラリを使用していますが、IP ヘッダーと TCP/UDP/ECT ヘッダーを削除する組み込み関数があるかどうか疑問に思っていました。そうでない場合、そのようなヘッダーの削除をどのように達成したかを投稿できますか?

0 投票する
1 に答える
1561 参照

c - pcap のゼロ読み取りタイムアウト

-1 は pcap の有効な読み取りタイムアウトですか?

to_ms を -1 に設定するとpcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *errbuf);、パケットが検出されるとすぐに返される - 事実上ゼロのタイムアウトになると誰かから言われました。ゼロのタイムアウトを設定する方法があることは非常に理にかなっていますが、-1 を無限にし、0 を 0 にしないのはなぜでしょうか? その方が論理的でしょう。さらに、-1 の to_ms 値が pcap に与える影響を確認できませんでした。

では、-1 は有効なタイムアウト値ですか? もしそうなら、それはどのような効果がありますか?そうでない場合、検出タイムアウトをゼロに設定する方法はありますか?

0 投票する
1 に答える
510 参照

c# - C# 奇妙な問題のための Pcap ライブラリ

現在、PCAP C# ライブラリを使用しており、受信したパケットを変更していません。問題を次の図に示します。

http://img269.imageshack.us/img269/6549/wtfisthisshitx.jpg

左側は Wireshark (キャプチャされたパケットの正しいバージョン) で、右側は Pcapсфз ライブラリを使用した私のキャプチャです。c2s は属していません。他の誰かがこれを見たことがありますか?

パケットを受信するために使用しているコードは、Web サイトに掲載されている例とほぼ 100% 似ています。

0 投票する
1 に答える
1149 参照

c - libpcap を使用して 2 つのデバイスで同時にリッスンする

libpcap を使用して 2 つのデバイスでリッスンしようとしていますが、その方法がわかりません。デバイスを「任意」に設定しようとしましたが、機能しません。dhcp リレー エージェントを作成しようとしているので、eth0 と eth1 でリッスンする必要があります。

それぞれ異なるデバイスとハンドラーを持つ 2 つの pcap_loops を作成しようとしましたが、最初の pcap_loop のみが機能し、2 つ目は無視されます。

これを行う方法はありますか、それとも libpcap を離れて raw ソケットで実行する必要がありますか?

0 投票する
3 に答える
12319 参照

c++ - TCP パケットのペイロードを解析する方法

ペイロードを解析したい TCP パケットをキャプチャするために pcap を使用しています。私の戦略は次のとおりです。

  1. イーサネット ヘッダーを取得し、タイプETHERTYPE_IP(IP パケット)があるかどうかを確認します
  2. IP パケットにプロトコルIPPROTO_TCP(TCP パケット)があるかどうかを確認する
  3. ペイロード サイズ > 0 を確認します(size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header))

  4. ペイロードを解析する (ホスト URL を取得する)

不一致が発生しているため、ペイロードの解析をまだ開始していません。以下は、 filter を使用してキャプチャされた 10 個の TCP パケットのペイロードの出力"host = www.google.com"です。

パケット番号: 3 : TCP パケット: ソース ポート: 80 宛先ポート: 58723 パケットにデータがありません

パケット番号: 4 : TCP パケット: 送信元ポート: 58723 送信先ポート: 80 パケットにデータがありません

パケット番号: 5 : TCP パケット: Source Port: 58723 Dest Port: 80 Payload: GET / HTTP/1.1 Host: www.google.com User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-米国) AppleWebKit/533.19.4 (Gecko のような KHTML) バージョン/5.0.3 Safari/533.19.4 Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8 ,image/png, / ;q=0.5 Accept-Language: en-us Accept-Encoding: gzip, deflate Cookie: THICNT=25; SID=DQAAAKIAAAB2ktMrEftADifGm05WkZmlHQsiy1Z2v- 接続: キープアライブ

パケット番号: 6 : TCP パケット: ソース ポート: 80 宛先ポート: 58723 パケットにデータがありません

パケット番号: 7 : TCP パケット: ソース ポート: 80 宛先ポート: 58723ペイロード: \272نu\243\255\375\375}\336H\221\227\206\312~\322\317N\236\255A\343 #\226\370˙\245[\327`\306\nE\263\204\313\356\3268 )p\344\301_Y\255\267\240\222x\364

パケット番号: 8 : TCP パケット: ソース ポート: 58723 宛先ポート: 80 パケットにデータがありません

パケット番号: 9 : TCP パケット: ソース ポート: 80 送信先ポート: 58723ペイロード: HTTP/1.1 200 OK 日付: 2010 年 11 月 29 日月曜日 10:11:36 GMT 有効期限: -1 キャッシュ制御: プライベート、最大年齢 = 0 コンテントタイプ: text/html; charset=UTF-8 Content-Encoding: gzip サーバー: gws Content-Length: 8806 X-XSS-Protection: 1; モード=ブロック \213

ペイロードとポートに不一致があるのはなぜですか? 理想的には、パケット 5 のようなパケットのみを解析したいと考えています。7 や 9 のようなパケットを無視するにはどうすればよいですか?

0 投票する
1 に答える
359 参照

c - Ruby/C/Makefile、-lpcap/#include で使用されるデフォルトの pcap.h ファイルは何ですか

Makefile を介してコンパイル/インストールされている C ソースに含まれている pcap.h ファイルを特定するにはどうすればよいですか?

具体的には、次の方法でインストールされる Ruby ライブラリ (pcaprub) です。

extconf.rb は次のとおりです。

0 投票する
2 に答える
135 参照

c - pcapは新しい接続のみを取得します

pcapを使用してパケットキャプチャを実行する非常に単純なCプログラムを作成しました。つまり、それは私のネットワークアクティビティのごく一部を拾うだけです。(パターンは、新しいTCP接続でのみ取得するというものだと思います。)

たとえば、ブラウザまたはwgetを使用してGETリクエストを実行したとき、またはX-Chat IRCクライアントを起動して接続したときに、大量のパケットを取得します。

ただし、IRCクライアントを実行したままにすると、テキストメッセージに対応するパケットを取得しません。同様に、ホームネットワーク上のARPブロードキャスト、またはWebサイトにpingを実行するときにパケットにpingを実行しません。

なぜそれが私が送受信しているパケットのこの小さなサブセットだけを拾っているのか疑問に思います。これが私のコードです。フィードバックをいただければ幸いです。

コード: http: //pastebin.com/QDHRy6jM