我在vb.net中编写了一个需要公共IP地址的应用程序,只需要纯文本格式。我知道有很多网站以文本格式为您提供IP。但总是有机会被关闭或停止服务。但谷歌永远不会停止!现在我想从谷歌搜索获取我的IP。例如,如果您搜索"我的IP"在谷歌它将带你的IP像这样: Sample of search 无论如何要从谷歌获得IP?
答案 0 :(得分:1)
谢谢你们,但我找到了一条路: 首先导入一些名称空间:
Dim client As New WebClient
Dim To_Match As String = "<div class=""_h4c _rGd vk_h"">(.*)"
Dim recived As String = client.DownloadString("https://www.google.com/search?sclient=psy-ab&site=&source=hp&btnG=Search&q=my+ip")
Dim m As Match = Regex.Match(recived, To_Match)
Dim text_with_divs As String = m.Groups(1).Value
Dim finalize As String() = text_with_divs.Split("<")
Return finalize(0)
现在让我们写一个函数:
class Car : Vehicle
{
public string brand { get; set; }
public string type { get; set; }
public int maxSpeed { get; set; }
public double price { get; set; }
public static int carID { get; set; }
public Car(string _brand, string _type, int _maxspeed, double _price)
{
this.brand = _brand;
this.type = _type;
this.maxSpeed = _maxspeed;
this.price = _price;
this.carID++;
}
}
现在正在工作和生活!
答案 1 :(得分:1)
硬编码的Div类名称让我有点紧张,因为它们随时都可以轻易改变,所以,我稍微扩展了Hirod Behnam的例子。
我删除了Div类模式,将其替换为更简单的IP地址搜索,并且它将仅返回找到的第一个,对于此搜索,应该是页面上显示的第一个(您的外部IP)。
这也消除了将结果拆分为数组的需要,以及那些相关的变量。我还将Google搜索字符串简化为最低限度。
如果速度至关重要,那么分别为.DownloadString()和.Match()包含一两个超时仍然是一个不错的选择。
Private Function GetExternalIP() As String
Dim m As Match = Match.Empty
Try
Dim wClient As New System.Net.WebClient
Dim strURL As String = wClient.DownloadString("https://www.google.com/search?q=my+ip")
Dim strPattern As String = "\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b"
' Look for the IP
m = Regex.Match(strURL, strPattern)
Catch ex As Exception
Debug.WriteLine(String.Format("GetExternalIP Error: {0}", ex.Message))
End Try
' Failed getting the IP
If m.Success = False Then Return "IP: N/A"
' Got the IP
Return m.value
End Function