rawソケットに関する二つの小さな問題

1、契約がIPPRORO_TCPに設定することができるかどうかrawソケット?UDPとTCPパケットは、元のソケットに渡しません。この時点で、ソケットに対応していませんか?

回答:

(1)であってもよいです。ソケット()関数のため、プログラミングストリームソケットがSOCK_STREAM第二パラメータであり、データグラムソケットのプログラミング、2番目のパラメータはSOCK_DGRAMであり、両方の場合において、第三のパラメータが満たすことができます0ので、システムは自動的に対応するプロトコルと一致します。

生のソケットプログラミングは、2番目のパラメータは、この場合、3番目のパラメータは、適切なプロトコルを指定する必要があり、SOCK_RAWであり、プロトコルタイプ値共通IPPROTO_IP、IPPROTO_ICMP、IPPROTO_TCP、IPPROTOとIPPROTO_RAWを有しています。

(2)しません。受信したUDPまたはTCPパケットが任意のrawソケットに渡されていないプロセスを含む読みたい場合は、UDPのパケットを、またはTCPののパケットのIPデータパケット、それはすなわち、使用した(データリンク層でパケットを読まなければなりませんIPPROTO_IPの全体読み取るためのオプションのIPパケットを)。

生のソケットとIPPROTO_UDP IPPROTO_TCPオプションを使用する場合、唯一のTCPまたはUDPパケットは、TCPまたはUDPパケットプロトコル、TCPやUDPなどを受信することができない(IP_HDRINCLによってIPヘッダの動作をするかどうかを決定するために)送信しましたパケットプロトコルカーネルによって決意し、ソケットのオリジナルのコンセプトは、TCPやUDPパケットを受信することができないため、ポートではない、としながら、データパケットを送信するためのソケット接続に一致するIPアドレスとポート番号を見つけます。rawソケットは、IPパケット全体IPPROTO_IP、その後、TCPとUDPのデータ抽出により得ることができます。

2、生ソケットの送信とIPヘッダの構造、またはのsendto?もしそうであれば、その後のsendto、IPアドレスヘッダおよび設定パラメータIPアドレスとバインド構造が矛盾しているの一貫性のない、または接続、IPヘッダに、どのように対処するには?

回答:

(1)生インターフェース送信データ・セットは、通常のsendto、宛先アドレスは、5番目のパラメータに送信します。送信データはもちろんも使用するのはsendto、送信を直接呼び出すことができたときにあまりにも接続コールした場合、宛先アドレスはすでに、設定されている、と5番目のパラメータがNULLに設定されています。NULLでない場合、システムは、に指定された宛先アドレスにデータを送信します

(2)エラーコードWSAEINTRで失敗します。目的は、サービス拒否攻撃を許可または偽のIPアドレスが偽装されたパケットを送信しない、悪意のあるコードを制限することです。

おすすめ

転載: www.cnblogs.com/cyx-b/p/12638191.html