我正在尝试为两个Android设备之间的p2p通信开发应用程序。为了在我的NAT中穿孔,我需要知道我的外部IP地址和端口。
为此,我在GAE上开发了一个java服务器来报告我的“远程”IP地址和端口。问题是在GAE上我可以获取我的IP地址,但不能获取我的端口。没有它,我无法成功地打洞。
所以,我的问题是找出我的外部IP地址和端口的最佳免费方法是什么?
答案 0 :(得分:1)
听起来您的应用可以使用STUN服务器来获取其外部地址。
答案 1 :(得分:1)
这是一个对TCP没有答案的问题。
问题在于:您的“端口”不是固定值。你没有“一个”外部端口。您通常会为每个出站连接动态分配一个。
作为答案,您应该从另一个答案中发布的test sites清楚地表明,它是一个移动的目标(尽管由于浏览器使用HTTP / 1.1 Keepalive并且实际上重复使用它,它可能会保持静止很短的时间连接,而不仅仅是相同的端口)...但如果你反复点击网站,你会看到它随机漂移或增加。从同一台机器上的两个不同的Web浏览器尝试它,你永远不会看到相同的端口号 - 端口对应于特定的源连接,而不是与连接的机器相对应。
有时,您可能会发现它与您的机器堆栈为出站连接打开的端口具有相同的端口号,但即使它是,也没关系,因为没有流量应该能够返回到您的机器上该端口,除非它来自您进行出站连接的机器的IP地址和端口。任何体面的网络地址转换设备都不会接受来自其他源IP地址和/或端口的流量,除了您在出站连接中寻址的流量。
没有标准的,简单的,可预测的,可靠的或一致的方法来在TCP NAT中打孔,然后利用该漏洞进行对等连接。在某种程度上,在给定的NAT实现中这样的事情是可能的,这是一种伪劣,破坏,有缺陷和不安全的实现。