私はネットワークプログラミングの経験が比較的限られており、誰かがおそらくn00bishの質問で私を助けてくれることを望んでいました. :)
2 つの C++ プログラムを別々に実行しています。1 つは、特定のポートで受信したパケットのみをリッスンするようにフィルタリングする libpcap ライブラリで作成された単純なパケット スニファーです。次に、ペイロードの長さとペイロードの内容をバイナリ ファイルに書き出すようにパケットを解析します。
もう 1 つのプログラムは単純な bsd ソケット サーバー プログラムで、recv() 関数を使用して特定のポートでメッセージを受信するように設定されており、受信したメッセージの長さとメッセージの内容を同様にバイナリ ファイルに書き込みます。
すべてが正常に動作しているように見えるので、バイナリ出力ファイルを確認すると、内容は同じであると予想されます...しかし、残念ながら、それらは多少似ているだけです。パケット スニファーは、サーバーがキャッチしているのと同じデータをキャッチしているように見えますが、明らかにサーバー プログラムによって受信されていない、6 バイト長のペイロードを持つ余分なパケットも記録しています。
したがって、パケット スニファーがサーバーが認識していないパケットを検出しているか、サーバー プログラムが受信するはずのパケットを見逃しているかのいずれかです。ただし、サーバー プログラムが適切に機能し、適切なメッセージを受信していることには多少の自信があるので、パケット スニファーによってこれらの余分なパケットが検出されるのは困惑させられます。これらの余分なパケットが何であるか、およびそれらをどのように除外するかを知っている人はいますか?
ノート:
私がリッスンしているポートにデータを送信しているクライアントは、小さなネットワーク内の古い Windows NT マシンであり、基本的にバイナリ データをサーバー プログラムに渡して処理しています。
残念ながら、職場のポリシーにより、コードをアップロードできません。ただし、私のコードの例は次の場所にあります: http://www.tcpdump.org/pcap.html http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html
再度、感謝します!