Linuxカーネルが特定のポートでTCPパケットを処理しないように無効にする

Linuxカーネルが特定のポートでTCPパケットを処理しないように無効にする

私は現在、rawソケットを使用してLinuxユーザースペースで実行されるTCP / IPスタックを開発しています。

これをテストするには、カーネルが実装を妨げないように(たとえば、カーネルがハンドシェイクに応答するように)、特定のポートのLinuxカーネルTCPコードを無効にする必要があります。

私はすでに言及しましたこれ、これは生のソケットがネットフィルタを迂回することを示します。ただし、テスト中に生のソケットがパケットを受信できませんでした。

さらに調査を行った後に発見しました。私のAF_INETソケットはまだTCP / IPスタックにあります。しかし、イーサネットフレームを実装したくありません。

AF_PACKETを使用せずに特定のポートでカーネル処理を無効にする方法はありますか?

編集する:

次のようにソケットを作成しますsocket(AF_INET, SOCK_RAW, IPPROTO_TCP)。次にHDRINCLを設定します。setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

ベストアンサー1

IPTablesのRAWテーブルを使用してこれを行うことができます。次のルールを使用します。

iptables -t raw -A PREROUTING -p tcp --dport <your port> -j DROP

これにより、カーネルがパケットを無視してハンドシェイクに応答しなくなります。

おすすめ記事