使用 VB.net 从 JSON 文件中提取 IP 地址

Extract IP Addresses from JSON file using VB.net

有没有一种方法可以使用 VB.net

从 JSON 语言的文件中仅提取 IPv4

例如,我希望当我从 VB 打开一个 JSON 文件时,我可以从该文本中仅过滤 IPv4 例如:https://pastebin.com/raw/S7Vnnxqa

& 我期待这样的结果 https://pastebin.com/raw/8L8Ckrwi 我创建了这个网站,他提供了一个工具来做到这一点 https://www.toolsvoid.com/extract-ip-addresses/ 我把 link 放在这里是为了更多地理解我的意思但是我不想使用外部工具,我希望它直接从 VB 转换而来。感谢您的提前帮助。

你的 "text" 是 JSON。使用您选择的 JSON 解析器加载它(google VB.NET 解析 JSON),遍历 matches 数组并从 http.host 属性 每个元素。

这里是一个如何使用 Newtonsoft.Json 包实现它的例子(看到它工作 here on DotNetFiddle):

' Assume that the variable myJsonString contains the original string

Dim myJObject = JObject.Parse(myJsonString)
For Each match In myJObject("matches")
    Console.WriteLine(match("http")("host"))
Next

输出:

62.176.84.198
197.214.169.59
46.234.76.75
122.136.141.67
219.73.94.83
2402:800:621b:33f1:d1e3:5544:4fcf:526e
178.136.75.125
188.167.212.252
...

如果只想提取IPv4,不提取IPv6,可以使用正则表达式检查是否匹配:

Dim IPV4Regex = New Regex("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")

Dim ip = match("http")("host")
If IPV4Regex.Match(ip).Success Then
  Console.WriteLine(ip)
End If
62.176.84.198
197.214.169.59
46.234.76.75
122.136.141.67
219.73.94.83
178.136.75.125
188.167.212.252
...

当然,始终建议以结构化方式解析输入数据,以避免误报等意外情况。但是,如果您只想匹配看起来像 IP 地址的 anything,而不管输入格式如何(即使您只是将 hello1.2.3.4world 放在文本框中),那么您可以使用只是正则表达式并跳过结构化方法(看到它有效 here on DotNetFiddle):

Dim IPV4RegexWithWordBoundary = New Regex("\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b")

Dim match = IPV4RegexWithWordBoundary.Match(myJsonString)
Do While match.Success
    Console.WriteLine(match.Value)
    match = match.NextMatch()
Loop

这里我修改了正则表达式,使用\b...\b代替^...$,这样它就可以匹配单词边界而不是字符串的start/end。但是请注意,现在我们使用您提供的输入获得 IP 地址两次,因为地址存在不止一次:

62.176.84.198
62.176.84.198
197.214.169.59
197.214.169.59
46.234.76.75
46.234.76.75
...