如何检测.Net中的公共IP地址(路由器/网关)的变化?

我知道NetworkChange.NetworkAddressChanged事件,但这仅适用于本地网络接口。

检测网关公共IP地址的最佳方法是什么? 据推测,人们必须通过轮询外部可靠的地址来做到这一点,例如google.com ……?

这是Akamai的一个: http : //whatismyip.akamai.com/

如果路由器支持它,您可以使用SNMP查询其公共IP地址(或者,至少,当我尝试这样做时,我必须查询所有IP地址并过滤掉私有地址)。 您需要识别与IP地址值对应的OID(对象ID),我认为这些值应该在所有路由器中都相同。 定期轮询路由器并将之前的结果与当前结果进行比较。 或者,设置SNMP陷阱,以便路由器通知您的应用程序IP地址的更改。 实施起来可能比简单地从“我的IP是什么”网站处理HTML需要更多的工作,但这将更有效,可能更可靠,不会产生任何WAN流量,您不必依赖您无法控制的网站可能会阻止您或更改其HTML结构,从而破坏您的应用程序。

#SNMP是.NET的开源SNMP库。

使用外部API是唯一可靠的方法。 显示您的IP地址的大多数人将阻止机器发出的请求并要求CAPTCHA输入。 这是一个很好的机器,可以让机器提出要求:

http://ip.nefsc.noaa.gov