编程语言
首页 > 编程语言> > c# – 为什么Google会捕获与我的TcpListener不同的IP地址?

c# – 为什么Google会捕获与我的TcpListener不同的IP地址?

作者:互联网

我有一个非常简单的http服务器:

TcpListener server = new TcpListener(System.Net.IPAddress.Any, 80);
server.Start();
var client = server.AcceptTcpClient();
var ip = client.Client.RemoteEndPoint;
// ip address in here is: 166.72.162.85

// etc. read request and write response....

enter image description here

我正在通过连接到AT& T 3G网络的手机提出这个要求.我的服务器检测到ip地址166.72.162.85

现在这是我的问题.我问这个问题主要是为了学习.为什么谷歌会捕获不同的IP地址?如何使用我的TcpListener捕获2600:387:9:3 :: c7?

enter image description here

解决方法:

看起来你是双堆叠网络 – 你有IPv4和IPv6连接,有点像同时连接到两个独立的“互联网”.

您的服务器可能只能从这些“互联网”中的一个访问 – IPv4 Internet.谷歌可以从两者访问.我们可以通过将www.google.com解析为IP地址来轻松检查.这是我机器上的结果:

enter image description here

注意第一个结果 – 2a00:1450:4001:821 :: 2004.这是一个IPv6地址,这是您的操作系统在访问www.google.com时尝试连接的第一个地址,因为现代操作系统更喜欢IPv6 over IPv4.因此,您与Google的连接将通过IPv6进行,您将看到来自您的IPv6地址(2600:387:9:3 :: c7).

连接到仅IPv4服务器时,将通过IPv4进行连接 – 从IPv4地址166.72.162.85到服务器的IPv4地址.

要使用IPv6访问您的服务器,您需要通过IPv6访问它:

>运行服务器的计算机必须具有公用IPv6地址
>客户端必须直接通过其IPv6地址或具有AAAA record的域名访问计算机,该域名是IPv6地址的DNS记录
>除此之外,您还需要确保服务器软件绑定到计算机的IPv6地址.您的代码绑定到System.Net.IPAddress.Any,which is equivalent to 0.0.0.0,表示“任何IPv4地址”.相反,您需要绑定到IPAddress.IPv6Any,这相当于0:0:0:0:0:0:0:0(或::),表示“任何IPv6地址”.

顺便说一句,您可以尝试通过https://ipv4.google.com/从仅支持IPv4的Google获取IP.它应该返回您在服务器中看到的相同的166.72.162.85.

标签:c,ip-address,ipv6,network-programming,httplistener
来源: https://codeday.me/bug/20190717/1487245.html