2012-03-07 8 views
0

私はRAWソケットとその作成方法について興味があり、独自のTCPメカニズムを実装したいと思っています。私はいくつかの例を読んだことがあります。カスタムTCPパケットとUDPパケットの両方を自分の書かれたIPヘッダーと共に送信することに成功しました(もちろん多くの例の影響を受けます)。パケットが宛先に到達していることをWiresharkに確認したので、これまでのところすべて正常です。完全なハンドシェイクを作るためにrawソケットを介して "syn"パケットを受信すると、 "syn ack"パケットでどのように応答しますか?

しかし、TCPパケットについては、:

Client  Server 
syn ---> 
    <--- syn ack 
ack ---> 

は私が戻ってクライアントにsyn ackを送ることができるようにsynパケットを取得するには、ビューのserver'sポイントから何が必要ですか?

+0

"サーバーの観点から、 synパケット "これはどういう意味ですか? –

+0

synパケットが指定されたポート上のサーバーに到達したとき、サーバー上で実行されているアプリケーション内でパケットを捕捉するにはどうすればよいですか? – Rox

+0

自分でIPを扱っているので、ネットワークプロトコルがIP層にフレームを渡し、IPのペイロードから 'message'を取り出します。あなたの' message'にsynヘッダが入っています。 –

答えて

1

rawソケットでパケットを受信するには、recvまたはrecvfromを呼び出します。 OSはマシンに宛てられた次のパケットのコピーをあなたに返します。ヘッダーと全てはアドレス情報を含んでいなければなりません。宛先アドレス、ポート、およびトランスポートプロトコルを監視し、期待していないものはすべて無視します。 (rawソケットのポイントは、ポートやOSがパケットをソケットにルーティングするために使用できる何も組み込みの概念がないため、どのプログラムに送信するのかわからないため、すべてのrawソケットが受信する必要があります

「あなた」宛てのパケットが表示されたら、SYN/ACKパケットを作成してそのアドレスに送信するだけです。ポートは、受信パケットのソースとしてリストされます。

OSは、TCPおよびUDPパケットの独自の処理を行います(ICMP「ポート到達不能」またはリスナーを持たないポートに対する他の応答を送信することを含む)。また、独自の処理を行いますそれの上に気味悪さを引き起こすように縛られている。独自のTCPのフレーバーを実装する場合は、別のプロトコル番号を使用することができます。 (もちろん、ほとんどのクライアントはそれに接続できません...クライアントも作成する必要があります)。

+0

決して遅くない方がいいですが、良い返答をいただきありがとうございます! :-) – Rox

+0

UDPにはソケットがあるので、UDPを待ち受ける場合は、宛先アドレス、ポート、およびトランスポートプロトコルについて心配する必要はありません。 –

+0

@MooingDuck:UDPソケットをお持ちの場合、OSはそれらをフィルタリングして、ソケットにバインドされたアドレス:ポート宛てのUDPメッセージのみを提供することを心配する必要はありません。一方、生のソケットはむしろばかばかしいです - OSはあなたにすべてを渡し、あなたが気にしているものを認識(そして解析)するためにそれをあなたの上に置きます。 – cHao

関連する問題