TCP と通信する Linux アプリケーションがあり、分析と統計に役立てるために、送信する TCP パケットの一部のデータを変更したいと考えています。Linux TCP スタックをハッキングせずにこれを行うことをお勧めします。
これまでのアイデアは、「TCP パケット修飾子」として機能するブリッジを作成することです。私のアイデアは、ブリッジの片側にある tun/tap デバイスを介してアプリケーションに接続し、ブリッジの反対側にある raw ソケットを介してネットワーク カードに接続することです。
私の懸念は、未加工のソケットを開くと、依然として Linux の TCP スタックにパケットを送信することです。これは正しいです?
ブリッジの疑似 C コード スケッチは次のようになります。
tap_fd = open_tap_device("/dev/net/tun");
raw_fd = open_raw_socket();
for (;;) {
select(fds = [tap_fd, raw_fd]);
if (FD_ISSET(tap_fd, &fds)) {
read_packet(tap_fd);
modify_packet_if_needed();
write_packet(raw_fd);
}
if (FD_ISSET(raw_fd, &fds)) {
read_packet(raw_fd);
modify_packet_if_needed();
write_packet(tap_fd);
}
}
これは可能に見えますか、それとも同じことを達成するための他のより良い方法はありますか? (TCP パケットのブリッジングと変更。)