gopacket を使用して Go で生の TCP パケットを作成する
gopacket を使用してカスタム TCP パケットを作成し、生のソケット経由で送信することを目的としています。ただし、提供されたコードで問題が発生し、次のパニックが発生します。「無効な送信元 IP 127.0.0.1.」
カスタム IPv4 パケットの作成
例あなたが提供したコードは、カスタム IP レイヤ 3 ヘッダーを作成することも目的としています。これは、TCP レイヤのみを処理することとは別の問題です。詳細な説明は次のとおりです:
Go での Raw ソケットの作成
一部の想定に反して、Go での Raw ソケットの作成は net.ListenPacket、net.DialIP を使用して可能です。 、または net.ListenIP:
conn, err := net.ListenIP("ip4:tcp", netaddr)
IP の設定ソケット オプション
独自の IPv4 レイヤ 3 ヘッダーを設定するには、IP_HDRINCL と呼ばれるソケット オプションを有効にする必要があります。これは Core Go パッケージではサポートされていませんが、ipv4 などのサードパーティ ライブラリはこの機能を提供できます。
conn, err := ipv4.NewRawConn(network, addr)
この関数は、生の接続を確立し、IPv4 の IP_HDRINCL を有効にします。
代替手段
より単純なタスク用TCP ヘッダーの操作を伴う場合は、レイテンシ コードが適している可能性があります。
// Create a raw socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_TCP)
ただし、このアプローチでは IPv4 ヘッダーの変更は許可されません。
推奨事項
提供されたコードの問題を解決するには、次のようなライブラリを使用する必要があります。 ipv4 を使用して IP_HDRINCL を有効にし、カスタム IP ヘッダーを設定します。あるいは、latency パッケージを調べて、TCP ヘッダー操作の簡素化されたアプローチを調べることもできます。
以上がGo でカスタム TCP パケットを作成し、「無効な送信元 IP 127.0.0.1」パニックを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。