問題タブ [getsockopt]
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.
python - チェリーピーで元の宛先IPを取得する
チェリーピー サーバーでキャプティブ ポータルを実行しており、すべての http トラフィックを未登録の MAC アドレスからポータルにリダイレクトする iptables ルールを設定しました。ユーザーがポータルのスプラッシュ ページを介して登録した後、iptables 例外を追加してトラフィックを通過させます。
ここで私がやりたいことは、ポータルに送信される前に、ユーザーを最初に目的としていたページにリダイレクトすることです。私は、iptables がすべての TCP パケットの元の宛先情報を含むフィールドを設定することを知っています。また、そのフィールドを読み取る getsockopt という C 関数があることも知っています。ただし、cherrypy でリクエストに関連付けられたソケットにアクセスする方法がわかりません。
誰でも私を助けることができますか?:)
c - OSX の getsockopt は正しくない値を返しますか?
次のプログラムを使用して、より大きな問題をデバッグしています。
OSX で同じプログラムを実行すると、getopt が 0 または 1 を返すことはありません。設定した optval の値は常に返されます。
私のプログラムには、私を逃れている明らかに間違った何かがあるに違いありません。
例 このプログラムを ./a.out 64.233.160.105 として実行しました
これが私が使用しているサンプルプログラムです。
sockets - NGINX : 65535 接続制限を超えています
HTTP とは異なり、websocket は HTTP からアップグレードされた後も長期間接続を維持します。
OS がすべてのポートを使用するように調整されている場合でも、合計で 65536 ポートしかありません。NGINX がこの制限を超える可能性はありますか?
潜在的な解決策は ですがSO_REUSEPORT
、ドキュメントが不足しています -- 少なくとも次の段落以外は見つかりません
NGINX リリース 1.9.1 には、SO_REUSEPORT ソケット オプションの使用を可能にする新しい機能が導入されています。これは、DragonFly BSD および Linux (カーネル バージョン 3.9 以降) を含む多くのオペレーティング システムの新しいバージョンで使用できます。このソケット オプションを使用すると、複数のソケットが同じ IP アドレスとポートの組み合わせでリッスンできます。次に、カーネルはソケット間で着信接続の負荷を分散します。
そのため、NGINX はaccept
インバウンド接続を受け入れるように呼び出します。
accept() システム コールは、接続ベースのソケット タイプ (SOCK_STREAM、SOCK_SEQPACKET) で使用されます。リッスン ソケット sockfd の保留中の接続のキューで最初の接続要求を抽出し、新しい接続済みソケットを作成し、そのソケットを参照する新しいファイル記述子を返します。新しく作成されたソケットはリッスン状態ではありません。元のソケット sockfd は、この呼び出しの影響を受けません。
新しいソケットはポートを消費しますか? はいの場合、65535 接続制限を超えるにはどうすればよいですか?
c - IP検出オプションのsetsockoptの設定
着信インターネット パケットの IP オプションを検出したい。これが私のコードです。
問題はヘッダーの長さが 6 であることですが、すべての ip オプションを検出するには長さを 20 にする必要があります。setsockopt では、有効な変数の型は char である必要があるかもしれませんが、プログラムを実行すると問題が発生します。実際、char 型を使用すると、無効な引数のエラーが発生します。getsockoption を使用してこれらのオプションを出力する方法も知りたいです。どうしたの?私の質問が明確であることを願っています:)
linux - 関数ポインタは構造体「proto_ops」のどこを指していますか?
getsockopt
Linux カーネルでは、システム コールが finally を呼び出していることがわかりましたsock->ops->getsockopt
( code here )。Andsock->ops
と呼ばれる構造体proto_ops
です。この構造体には次のような多くの関数ポインターが含まれてgetsockopt
おり、それがどこを指しているのか疑問に思っています-この構造体を開始する場所が見つかりませんでした。
システムコールにIPv4とTCPを使用していますが、ここで呼び出す特定の実装関数がある場合があります。
どんな洞察も非常に役に立ちます。前もって感謝します!
sockets - ソケットを処理しているネットワーク インターフェイス/デバイスを見つけることはできますか?
からファイル記述子を取得し、socket(2)
それを実行したとします。connect(2)
後で (実行中のプログラム内から) 基になるトランスポートに使用されている可能性のあるネットワーク デバイスを特定する方法はありますか? stat(2)
fd で を呼び出すと、デバイス番号 0 が返されます。ioctl(2)
またはgetsockopt(2)
オプションのいずれも適用できないようです。
c - getsockopt が負のミリ秒を返す (CLion 上)
関数getsockopt
を使用して MSS を取得すると、負の数 (または 0) が返されるという問題が発生しました。しかし、機能は成功し、ソケットは正しい値であり、正しく機能hSocketService
しています。
だから私は得た:
コードは次のとおりです。
ありがとう
編集
Clionでcygwinを使用してWindowsでコードを実行していることを正確に忘れていました。
コードを変更したところtailleS
、タイプsocklen_t
は になり、その値をprintf("Taille maximale d'un segment = %u\n", tailleS);
結果とともに出力するのは ですTaille maximale d'un segment = 0
。
したがって、問題は同じです。 getsockopt が機能していても、正しい値が得られません。