我知道该NetworkChange.NetworkAddressChanged
事件,但这仅适用于本地网络接口。
检测网关的公共 IP 地址已更改的最佳方法是什么?大概必须通过轮询外部可靠地址来做到这一点,例如 google.com ...?
我知道该NetworkChange.NetworkAddressChanged
事件,但这仅适用于本地网络接口。
检测网关的公共 IP 地址已更改的最佳方法是什么?大概必须通过轮询外部可靠地址来做到这一点,例如 google.com ...?
Here's one by Akamai: http://whatismyip.akamai.com/
如果路由器支持它,您可以使用 SNMP 查询其公共 IP 地址(或者,至少,当我尝试这样做时,我必须查询所有 IP 地址并过滤掉私有地址)。您需要识别与 IP 地址值相对应的 OID(对象 ID),我认为在所有路由器上应该是相同的。定期轮询路由器并将之前的结果与当前结果进行比较。或者,设置SNMP 陷阱因此路由器会通知您的应用程序更改 IP 地址。与简单地处理来自“我的 IP 是什么”网站的 HTML 相比,实现它可能需要更多的工作,但这会更有效,可能更可靠,不会产生任何 WAN 流量,而且您不必依赖您无法控制的网站可能会通过阻止您或更改其 HTML 结构来破坏您的应用程序。
#SNMP是 .NET 的开源 SNMP 库。
使用外部 API 是唯一可靠的方法。大多数泄露您的 IP 地址的人会阻止机器发出的请求并要求输入验证码。这是一个允许机器发出请求的好方法: