問題タブ [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.
sockets - 既存の udp アプリケーションを raw ソケットに移行する方法
プレーン udp ソケット (Linux、C99/C++、recv
syscall を使用) から raw ソケットへの移行に関するチュートリアルはありますか?
http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.htmlによると、 raw ソケットは udp よりもはるかに高速です。
アプリケーションはクライアントサーバーです。クライアントはプロプライエタリであり、udp サーバーとまったく同じプロトコルを使用する必要があります。ただし、生のソケットを使用すると、サーバーは少し高速になります。サーバーに実装する必要がある udp の部分は? 「クイック移行」ライブラリはありますか?
linux - ループバックインターフェイスのrawソケットは可能ですか?
Linuxループバックインターフェイスをリッスンしているサーバーとrawソケットを介して通信しようとしていますが、サーバーが単一のパケットを取得していないようです。送信するパケットはWiresharkに表示されます。
ループバックのrawソケットは可能ですか?(なぜそれが必要なのか尋ねないでください。ここで説明するには複雑すぎます)
編集:これは私たちがそれを開く方法です
サーバーはlighttpdであり、ローカルホストの通常のソケットを介して到達可能です。netstat --rawは空のテーブルを出力しますが、通常のethデバイスには2つの機能するrawソケットがあると確信しています。
c - strncmp() と if() が一致しません...何が欠けていますか?? (生のソケット)
イーサネットレベルで動作する単純なエコーサーバー/クライアントを構築しようとしています(生のソケットを使用)。サーバー側はそれ自体で動作し、eth0 ですべての着信パケットを表示します。クライアントは動作し、eth0 でイーサネット パケットを送信します (wireshark で確認したところ、パケットが送信されていることがわかりました)。関心のあるパケットのみを表示するフィルターを作成したいと考えています。(これは宛先/送信元アドレスに基づいています。)
以下のコードで、strncmp が 0 を返す (つまり、文字列が一致する) のに、「if(ethernet_header->h_dest == mac)」が実行に失敗する (一致しない) 理由を説明してください。変数 "mac" と "ethernet_header->h_dest" はどちらも同じ型と長さです。
いくつかの背景: - これは linux 64 ビット (ubuntu) で行われます - 送信/受信に同じマシンで eth0 を使用しています....これは問題ではないと思いますか?
strcmp が一致を返す理由と、そうでない場合の理由がわかりません。何が足りないの??
c++ - Linux で raw ソケットを使用する場合、802.3 ヘッダーの長さは常に 256 です。
生のソケットを開いて送信する次のコードがあります。send 関数には、パケットの長さが 21 であることを示すトレース ステートメントがあります。
- 実際のパケット長は 60 です。
- 長さ (802.3 ヘッダーで指定) は 256 です。
これらの数字はどちらも 21 ではなく、この不一致を嫌う組み込みデバイスと通信しています。私はグーグルで検索しましたが、 sendto() が正しい長さを報告する方法がわかりません。
編集:そのフィールドが sockaddr_ll 構造の sll_protocol フィールドに設定されていることを発見しました。しかし、なぜ?htons(ETH_P_802_2) に設定しても、本来は役に立ちません。
c++ - ネットワーク ソケットからデータを受信するための C++ のバッファとして何を使用すればよいですか?
C++ でソケットを使用しています。このプログラムは単に HTTP ページを要求し、それを buffer に読み込んでから、バッファーbuf[512]
を表示します。ただし、ページにはバッファーよりも多くのデータを含めることができるため、残りのスペースがなくなると切り取られます。バッファー サイズを大きくすることはできますが、それは良い解決策とは思えません。これは私が使用しているコードです:
バッファーとして使用する C++ の char 配列の代わりになるものは何ですか?
c - C で Don't Fragment (IP_DF) フラグを設定する方法
IP パケットに Don't Fragment フラグを設定したいと考えています。setsockopt()
関数または関数のフラグを介してそうする方法はありsendto()
ますか?
「通常の」ソケットでこれを行うことはできますか、それとも raw ソケットを使用して IP ヘッダー全体を自分で構築し、オフセット フィールドをIP_DF
(ip.h で定義されている) に設定する必要がありますか?
assembly - アセンブラの低レベルネットワーク(x86互換)
ネットワークパケットを送受信できるアセンブラで起動可能なプログラムを作成したいと思います。ライブラリは使いたくないので、すべて自分で作成したいです(そして、そうしながら学びたいです)。残念ながら、最下位レベルのネットワークカードとの通信(rawソケットの送信)に関する情報を見つけることができませんでした。ネットワークカードに割り当てられているポートに関する情報(または、常に同じであるとは限らない場合はその方法)は見つかりませんでしたが、使用方法OUT
と手順が必要だと思います。IN
誰かが私を正しい方向に向けることができますか?;-)
c - Linux で C を使用すると raw ソケット sendto が失敗する
コードで作成した IP ヘッダーと UDP ヘッダーを使用して、UDP を使用して生のパケットを送信しようとしています。raw パケットは で正常に初期化されsocket(PF_INET, SOCK_RAW, IPPROTO_UDP)
、 を使用してソケット オプションが設定されsetsockopt(sd, IPPROTO_IP, IP_HDRINCL, val, sizeof(int))
ました。
問題は、 を使用してパケットを送信するとsendto()
、「メッセージが長すぎます」というエラーが表示されることです。
IP ヘッダーは 20 バイト、UDP ヘッダーは 8 バイト、データは 12 バイトです。したがって、合計はわずか 40 バイトです。これは、単一の UDP パケットに対して長すぎることはありません。誰か助けてくれませんか?
の型val
はへのポインタですint
これが私のコードです:
python - python socket.PF_PACKET
dpkt を使用して python で ARP 要求を送信しようとしていますが、次を使用するサンプル コードを見つけました。
これを送信するには raw ソケットを使用する必要があることは理解していますが、socket.PF_PACKET が存在しないと表示されています。そして、私が見たPythonドキュメントには何もありません。では、この人はどこから PF_PACKET を取得したのでしょうか? それは何をするのでしょうか? どうすれば取得できますか?
python - CコードをPythonプログラムに埋め込む方法は?
マルチスレッドの raw ソケットを使用して Python でポートをスキャンするプログラムを作成したいのですが、raw ソケットを注入するための C コードがあります。ACK スキャンを実行したいので、raw ソケットが必要です。
だから私を助けてください。
ありがとうございました