私は現在、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
これにより、カーネルがパケットを無視してハンドシェイクに応答しなくなります。