TCP 通信確立後、任意のパケットを送信するプログラムを
作成しようと考えてます。ここでの任意のパケットとは、
下記のように TCP ヘッダの値を色々と設定したパケットを
指します。
・TCP ヘッダのすべての制御フラグを有効にしたパケット
・TCP ヘッダのチェックサムを意図的に間違えたパケット
任意のデータを送信するだけであれば、通常の socket
プログラムで実装できると思うのですが、TCP ヘッダを
色々と設定するプログラムとなると、どんな実装になるの
でしょうか。C だと SOCK_RAW で socket 通信するよう、
実装するのでしょうか。
実装は C、perl を考えてます。
No.3
- 回答日時:
> 例えば、userland で動く TCP スタックをご存知であれば教えてください。
私も探さないで書いてしまったのですが、あまり見当たらないですね ^^;
参考URLに書いた MuXTCP という python のプログラムはユーザランドで動きそうですよ。
参考URL:http://kybkreis.org/wiki/MuXTCP
ご回答ありがとうございます。
MuXTCP がどんなものか確認してみました。
ちょうど自分の望むことができそうです。
まだ開発途中のようですので、今後に期待ですね(^^
No.1ベストアンサー
- 回答日時:
セッションの確立と任意のパケット送信を(スタックから見たときに)同じセッション行うか、そうでないかで話が変わってくると思います。
同じスタックから行う場合は、既存の TCP スタックをいじって何かのタイミングで任意の動作を行うコードを入れることになります。
linux 2.6系の場合は net/ipv4/tcp_output.c あたりを改変することになるでしょう。
kernel space のプログラミンに対して敷居が高いと感じるなら、userlandで動く TCP スタックを探すと良いと思います。
セッションの確立を行ったのとは別のところから、そのセッション内のものと見せかけたパケットを送信するのならばおっしゃる通り SOCK_RAW でパケットを作って流し込めば良いと思います。
セッションの情報(ポート番号, 両方向の ACK 値など)が固定されているのであれば、比較的簡単に書けるでしょう。固定されていないのであれば、毎回パケットを眺めながら調整する必要があるので、ちょっと大変かな。
相手が同じ応答(普通はACK値が変わりますが)を毎回返してくれるのであれば、URLのツールが使えるかもしれません。
http://www.secdev.org/projects/scapy/
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/
ありがとうございます。
あとでサイトを確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- UNIX・Linux iptablesを設定するとメール送信処理が遅くなる!? 6 2022/06/07 01:11
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- ルーター・ネットワーク機器 YAMAHAルータ設定について 1 2022/09/03 16:31
- docomo(ドコモ) ドコモの114サービスで、パケット通信中となるのは 電話の時以外もありますか? 先日主人の携帯を調べ 2 2022/12/08 11:28
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- ネットワーク 通信量を見たい 3 2023/03/01 07:47
- メルカリ らくらくメルカリ便 スマホを送った 箱が3 cm 以上ありました ゆうパケットではだめ? 1 2023/02/08 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでパワーシェルを実行したい...
-
VBA 電話番号の正規表現について
-
vba クリップボードクリアにつ...
-
小学1年生の子です。塾に行かせ...
-
ImageMagickでgif画像の一部が...
-
楽しくて最高のプログラミング...
-
ホワイトハッカー
-
プログラミングのPythonのnoteb...
-
プログラミング ソースコード
-
プログラミング
-
Windowsのアプリ開発ってなんの...
-
ExcelVBAでFormulaR1C1を列範囲...
-
Google ColaboでGUI作成
-
Powershellとコマンドプロンプト
-
GoogleAppsScript文字列置換の...
-
プログラマーと学歴の関係性に...
-
Pythonって何を意識した言語な...
-
テキストファイルのファイル名...
-
プログラミング、アーキテクチ...
-
Webプログラムってネイティブア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows端末でのsyslog受信につ...
-
ゲームプログラミングのネット...
-
C言語でTCPの3way handshake
-
F-09D
-
「シェーピング」って何ですか。
-
ネットワークカード2枚挿し TC...
-
ネットワーク上に存在しないIP...
-
パケットの中身について。 始点...
-
簡単なパケットキャプチャーソフト
-
パケット生成ソフト
-
不要なパケット
-
ユニックス時間(秒)を普通の日...
-
構造体のメンバをfor文で回したい
-
batファイルでtelnetを起動⇒文...
-
mailto:の本文に文字数制限はあ...
-
アクセスで有給休暇管理表を作...
-
mailto:の中に&を入れる
-
動的にプロパティ名を変えたい
-
時間の平均値を計算する方法を...
-
MACアドレスで逮捕できる?
おすすめ情報