お酒好きのおしりトラブル対策とは

TCP 通信確立後、任意のパケットを送信するプログラムを
作成しようと考えてます。ここでの任意のパケットとは、
下記のように TCP ヘッダの値を色々と設定したパケットを
指します。

・TCP ヘッダのすべての制御フラグを有効にしたパケット
・TCP ヘッダのチェックサムを意図的に間違えたパケット

任意のデータを送信するだけであれば、通常の socket
プログラムで実装できると思うのですが、TCP ヘッダを
色々と設定するプログラムとなると、どんな実装になるの
でしょうか。C だと SOCK_RAW で socket 通信するよう、
実装するのでしょうか。

実装は C、perl を考えてます。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

セッションの確立と任意のパケット送信を(スタックから見たときに)同じセッション行うか、そうでないかで話が変わってくると思います。



同じスタックから行う場合は、既存の TCP スタックをいじって何かのタイミングで任意の動作を行うコードを入れることになります。
linux 2.6系の場合は net/ipv4/tcp_output.c あたりを改変することになるでしょう。
kernel space のプログラミンに対して敷居が高いと感じるなら、userlandで動く TCP スタックを探すと良いと思います。

セッションの確立を行ったのとは別のところから、そのセッション内のものと見せかけたパケットを送信するのならばおっしゃる通り SOCK_RAW でパケットを作って流し込めば良いと思います。
セッションの情報(ポート番号, 両方向の ACK 値など)が固定されているのであれば、比較的簡単に書けるでしょう。固定されていないのであれば、毎回パケットを眺めながら調整する必要があるので、ちょっと大変かな。

相手が同じ応答(普通はACK値が変わりますが)を毎回返してくれるのであれば、URLのツールが使えるかもしれません。
http://www.secdev.org/projects/scapy/
    • good
    • 0
この回答へのお礼

tthe_mineさん、回答ありがとうございます。

>同じスタックから行う場合は、既存の TCP スタックをいじって何かのタイミングで任意の動作を行うコードを入れることになります。
>linux 2.6系の場合は net/ipv4/tcp_output.c あたりを改変することになるでしょう。
>kernel space のプログラミンに対して敷居が高いと感じるなら、userlandで動く TCP スタックを探すと良いと思います。

うーん、TCP スタックまで弄らないとダメなんですね。。。
kernel の TCP スタック以外の TCP スタックを利用することは
考えにありませんでした。例えば、userland で動く TCP
スタックをご存知であれば教えてください。

>セッションの確立を行ったのとは別のところから、そのセッション内のものと見せかけたパケットを送信するのならばおっしゃる通り SOCK_RAW でパケットを作って流し込めば良いと思います。
>セッションの情報(ポート番号, 両方向の ACK 値など)が固定されているのであれば、比較的簡単に書けるでしょう。固定されていないのであれば、毎回パケットを眺めながら調整する必要があるので、ちょっと大変かな。

直近でやりたいことが TCP セッション後に TCP ヘッダを
いじった 1 パケットを送信するだけだったので、
netcat で TCP セッションを張って、パケットジェネレータで
パケットを送信することで実現できました。
ただ、tthe_mineさんがおっしゃったように調整が面倒ですね(^^;

>相手が同じ応答(普通はACK値が変わりますが)を毎回返してくれるのであれば、URLのツールが使えるかもしれません。
>​http://www.secdev.org/projects/scapy/

ありがとうございます。
あとでサイトを確認してみます。

お礼日時:2007/02/15 00:31

> 例えば、userland で動く TCP スタックをご存知であれば教えてください。



私も探さないで書いてしまったのですが、あまり見当たらないですね ^^;
参考URLに書いた MuXTCP という python のプログラムはユーザランドで動きそうですよ。

参考URL:http://kybkreis.org/wiki/MuXTCP
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

MuXTCP がどんなものか確認してみました。
ちょうど自分の望むことができそうです。
まだ開発途中のようですので、今後に期待ですね(^^

お礼日時:2007/02/27 21:26

前の回答で「ACK値」と書いたのは「SEQ値」の間違いでした。

訂正します。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QwiresharkでパケットモニタするとRetransmissionが多発しているという意味は?

現在、自分で作成したパケット送信クライアントプログラムをテストしており、3秒に1回のタイミングでインターネット上にあるサーバのグローバルipアドレスに対し、TCPパケットを発信させて受信するというテストを行っています。
しかし、3秒に一回データを送っているはずなのに、その間隔10秒とか20秒とか間隔が開いてしまう時があります。

wiresharkというパケットモニタソフトで送信側、受信側共にパケットモニタを行ってみたところ、”Retransmission”が多発しているということがわかりました。(tcp.analysis.retransmissionというフィルタ設定で検索)この現象はある時とない時があります。テストして10日ぐらい経つのですが、このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

わかる方いらっしゃいましたらご教授よろしくお願いいたします。

Aベストアンサー

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを閲覧し、トラフィック過多が起き、回線が異常に混雑する」と言う事が起きていると考えられます。

解消するには以下の方法があります。
・「休み時間も、終業時間後も、プライベートでネットを使うな!」と言う「通達」を全社に出す
・社内LANを、トラフィック過多によるコリジョンが起きないよう高速で帯域のあるネットワークカード、LANハブ、ルーターに変える
・受信側と送信側を、社内LANから(電気的、アドレス的に)独立した別のLANにする

要は「混んでる時間帯なので仕方が無い」って事です。

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを...続きを読む


人気Q&Aランキング

おすすめ情報