問題タブ [raw-sockets]

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 投票する
2 に答える
14325 参照

c - Setsockopt() システムを使用したデバイス バインドを使用する raw ソケットが Fedora コア 6 (2.6.18-1.2798.fc6) で機能しない

この問題について誰でも助けてください。お願いします

以下のサンプル コードでは、raw sock を eth0 にバインドしています。しかし、プログラムの実行中、raw sock の recvfrom は同じマシン (xx_86) の eth0 と eth1 からパケットを受信して​​います。なぜ私には明らかではありませんが、この問題について何かを助けることができます. setsockopt が正常に動作していないことを願っています OS: Fedora Core 6(2.6.18-1.2798.fc6)

サンプル コード:

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

linux - TCP : サーバー側から EINPROGRESS をシミュレートする (Linux)

非ブロッキング クライアントからの接続をシミュレートして、EINPROGRESS エラーが発生するようにするにはどうすればよいですか? このようなエラーをクライアントに返すためにサーバーから何ができますか (つまり、いくつかの tcp タイマー、生のソケット サーバーなどを調整します)。

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

c - raw ソケットから IP src アドレスを取得するにはどうすればよいですか

raw ソケット経由で TCP パケットを送信したいのですが、tcp ヘッダーのチェックサム フィールドでスタックしてしまいました。raw ソケットが使用していた実際の IP アドレスを特定する方法がわからないため、チェックサム計算用の TCP 疑似ヘッダーを構築することは不可能のようです。

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

c - Raw ソケット - インターネット プロトコル層

私は、プログラマーがインターネット プロトコル スイートのレイヤー 2 (IP ヘッダー) にアクセスできるようにする C 言語の Raw Berkeley Sockets を使用してきました。特にワイヤレスローカルエリアネットワークに関して、生のソケットがレイヤー1(リンクレイヤー)でトランスポートを処理する方法を知りたいです。

たとえば、ソケットはどのネットワーク インターフェイス (eth0 または wlan0) にパケットを送信するかをどのように認識しますか?

ワイヤレス ルーターの背後にいる場合でも、IP ヘッダーの IP ソース アドレスに LAN アドレス (192.168.1.1) またはルーターのインターネット アドレス (74.125.226.68) を入力する必要がありますか?

IP ソース アドレスに LAN アドレス (192.168.1.1) を入力した場合、IP ヘッダーはルーターを通過するときに変更されますか、それともそのままで、パケットの受信側が送信しようとしますか?ネットワーク上のローカル ホストへの応答?

この分野での洞察をいただければ幸いです。

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

c - Raw Sockets:ガベージ値を出力するレシーバー

送信機を使用して文字配列を送信し、rawソケットを使用して受信機プログラムを送信しようとしています。受信側で送信された正しいバイト数を取得できますが、出力される値はごみです。誰かがここで私を助けてくれますか?

送信機:

受信機:

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

sockets - Wifiを介したrawソケット通信-受信者はパケットを受信できません

送信機から受信機にパケットを送信するためにrawソケットを使用しようとしています。Macまたは友人のDell(両方にUbuntu 12.04がインストールされている)に送信機と受信機の両方を展開すると、コードは正常に機能します。送信機と受信機を2つの異なるターミナルウィンドウで実行しましたが、正常に動作します。

しかし、一方のマシンで送信機を実行し、もう一方のマシンで受信機を実行すると、受信機はパケットを受信しません。誰かが問題を指摘できますか?私はソケットプログラミングに非常に慣れていないので、愚かな間違いは許してください。

送信機:

/*sendtoを使用してパケットを送信する関数*/

/ *モニターインターフェイスのrawソケットを作成し、そのソケットをインターフェイスにバインドする関数
* /

/* 主な機能 */

受信機:

データ構造:

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

c++ - パケット注入のための Libnet と Raw ソケット

GNU/Linux システムでのパケット インジェクションに関するいくつかの事柄について、経験豊富なネットワーク プログラマーの意見/アドバイスが必要です。私は、パケット インジェクションとスニッフィング用のオープン ソース C++ ライブラリに取り組んでいます。ライブラリはlibcrafterです。このページには、ライブラリがどのように機能するかを確認するためのいくつかの例があります。

私にはジレンマがあり、あなたの考えに感謝します。現在、ライブラリはネットワーク上でパケットを書き込む 2 つの方法を「提供」しています。まず、パケットが構築されます。

1) そして、Send() 関数で送信されます。

2) または RawSocketSend() 関数を使用する (これは、ベンチマークに使用している「実験的」関数ですが、ユーザーが利用できます):

ここで、sd はソケット記述子です。パケットにリンク層プロトコル (イーサネットなど) がある場合、sd は PACKET ソケット記述子である必要があります。そうでない場合は、RAW ソケット記述子にする必要があります。

パケットを送信する標準的で文書化された方法は、Send() メソッドを使用することです。現在、Send() メソッドはlibnetを使用してネットワーク上にパケットを書き込みます。

問題は、Send() 関数が RawSocketSend() よりもはるかに遅いことです... libcrafter がプロトコル フィールドを処理して libnet_build* を適切に使用する方法を適応させるために、私は常に多くのトリッキーで面倒なことをしなければなりません*関数 (パフォーマンスが低下します)。また、プロトコルを実装するたびに、libnet のドキュメントを確認する必要があり、開発プロセスが非常に退屈で遅くなります。そのため、パケット インジェクションに libnet を使用するのをやめ、Send() 関数内で RAW/PACKET ソケットを直接使用することを考えていました。

Libcrafter は、パケット クラフティング (チェックサム計算、バイト順、ヘッダー長など) のすべての面倒な作業を、ユーザーに対して透過的な方法で処理するように設計されています。また、RAW/PACKET ソケット (RawSocketSend 関数) を使用する最も一般的な GNU/Linux システム (Ubuntu、Fedora、Debian) では、すべて正常に動作します。

私が libnet を使用する唯一の理由は、移植性の問題です。しかし、libcrafter を GNU/Linux システム以外のシステムに移植する知識や意図はありません。

私の質問は次のとおりです。

  1. GNU/Linux のパケット注入ライブラリで RAW/PACKET ソケットを使用するのは賢明で安全ですか?
  2. libnet の使用をやめる場合、GNU/Linux ディストリビューション間の RAW/PACKET ソケットの移植性に関して考慮すべきいくつかの問題を知っていますか?
  3. RAW/PACKET ソケット インターフェイスは、カーネルの将来のバージョンで変更される可能性がありますか?

どうもありがとうございました :-)

0 投票する
0 に答える
410 参照

vb.net - .NET で標準レイヤ 2 パケットを受信しない

.NET でレイヤー 2 パケットを受信しようとしています。ソケットをRAWモードで使用しようとしましたが、役に立ちませんでした。

WireShark パケットの例:

これまでに試したことの1つは次のとおりです。

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

ipv6 - IPv6 Raw ソケット。SIO_RCVALL ソケットでパケットを受信できません。Win2008

私は運用目的で Windows Server 2008 R2 を使用しているため、Raw ソケット機能を利用することは問題ありません。しかし、代わりに、インバウンド RCVALL ソケットでデータを受信する際に問題が発生しました。私は何をやっている:

  1. m_recv_socket = socket( AF_INET6 , SOCK_RAW , IPPROTO_IPV6 ),
  2. setsockopt( m_recv_socket, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<const char*>( &recv_timeout_ms ), sizeof(int) );
  3. bind( m_recv_socket, reinterpret_cast<sockaddr *>( &sa ), sizeof( sa ) ); (ここでは、NIC の LINK-Local アドレス、つまり fe80::a077:5573:5f:3ca5 にバインドしています)
  4. WSAIoctl( m_recv_socket, SIO_RCVALL , &dwBufferInLen, sizeof(dwBufferInLen), &dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned , NULL , NULL ); (dwBufferInLen が 1 の場合)

このソケットでデータを受信しようとすると、常に WSA_TIMEDOUT を受信し、データを受信して​​いません。その間、Wireshark は、インバウンド トラフィックとアウトバウンド トラフィックの両方がこのインターフェイスに存在することを証明します。なにが問題ですか?何か助けてください。IPv4 用に変更された同じコードが正しく機能します。上記の呼び出しの戻りコードはすべて OK です。

手がかりを教えてください。タイプ (AF_INET6、SOCK_RAW、IPPROTO_IPV6) のバインドされていない送信ソケットが存在します。IPV6_HDRINCL が設定されています。手動で形成された TCP パケットをそれを介して送信します。Wireshark は、問題なくパスすることを証明しています。次に、受信ソケットにバインドしたアドレスに正確に TCP(RST, ACK) が着信していることがわかります。ただし、データ受信試行中はアプリケーションがブロックされたままです。すべてのチェックサムに問題はありません。そうでない場合、着信パケットに対する応答はありません。SEQ/ACK 番号がこれを証明しているため、この着信パケットは TCP(SYN) 要求への応答であると確信しています (Wireshark もこのストリームのシーケンスを示しています)。では、この受信ソケットに対して何が間違っているのでしょうか?

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

c - 生のソケット。htonを使用する場合のIPヘッダー

私はrawソケットを初めて使用し、IPヘッダーをいじっています。ip->ip_hl = sizeof(struct ip) >> 2 //works fine; しかし 、私はそれに気づきました ip->ip_hl = hton(sizeof(struct ip) >> 2) //will not work;

私が理解していないのは、この場合、すべての番号をホストの順序ではなくネットワークの順序に変換しないのはなぜですか?ネットワークオーダー/ホストオーダーをいつ使用するかを判断するための一般的なルールは何ですか?

ありがとう