2016-06-30 10 views
-1
static void Main(string[] args) 
{ 
    try 
    { 
     Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 

     string GETrequest = "GET/HTTP/1.1\r\nHost: 172.16.9.251\r\nConnection: keep-alive\r\nAccept: text/html\r\nUser-Agent: CSharpTests\r\n\r\n"; 

     IPEndPoint g_source = new IPEndPoint(IPAddress.Parse("172.16.9.251"), 0);//not my local ip address 

     socket.SetSocketOption(SocketOptionLevel.IP, //Applies only to IP packets 
        SocketOptionName.HeaderIncluded, //Set the include header 
          true); 

     //when we bind I getting error for "The requested address is not valid in its context" 
     socket.Bind(g_source); 

     socket.Connect(new IPEndPoint(IPAddress.Parse("172.16.9.251"), 80)); 

     socket.Send(Encoding.ASCII.GetBytes(GETrequest), Encoding.ASCII.GetBytes(GETrequest).Length,SocketFlags.None); 
     socket.Close(); 
    } 
    catch (Exception ex) 
    { 

    } 
} 
+2

最初のテストでは、IPAddress.Parse( "172.16.9.251")の代わりにIPAddress.Anyを使用します。おそらく間違ったIPアドレスを設定しています。ポート0で聞くことはできません。 –

+0

私はあなたのコードをフォーマットしました、それは混乱でした。次回は正しくしてください。 – DavidG

答えて

0

ソケットへの非ローカルIPアドレスをバインドすることはできませんよ。

IPEndPoint g_source = new IPEndPoint(IPAddress.Parse("172.16.9.251"), 80); 

代わりの

IPEndPoint g_source = new IPEndPoint(IPAddress.Parse("172.16.9.251"), 0); 

あなたはポート0を使用する場合は、システムがあなたを割り当てます1024-5000の間のランダムなポート。 https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind(v=vs.110).aspx

+0

返信ありがとうございます。しかし、問題は、それがIPアドレスのためのポートではありません。現在のところ、それはローカルIPなので、私のipであり、正常に動作しています。しかし、216.58.197.37のようなgmail.comのipに置き換えると、上記のエラーが出ます。 – Ashish

+0

こんにちはすべて、私はipアドレスを偽装したいです。 – Ashish

+0

自分以外のIPは使用できません。あなたができることは0.0.0.0、127.0.0.1、またはあなたの実際のIPをWindows設定で使用することです(例えば、192.168.1.10)。 GoogleからIPを使用している場合は、そのIPに「接続」することはできますが、そのIPに「バインド」することはできません。あなたはGoogleのサブネットにいません。 –

関連する問題