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

问题描述 投票:0回答:1

有一种方法可以使用VB.net从JSON语言的文件中仅提取IPv4

例如,当我从VB打开JSON文件时,我只能从此文本中过滤IPv4,例如:https://pastebin.com/raw/S7Vnnxqa

&我期望这样的结果https://pastebin.com/raw/8L8Ckrwi我建立了这个网站,他提供了一个工具来执行https://www.toolsvoid.com/extract-ip-addresses/我在这里放置了链接以了解更多我的意思,但是我不想使用外部工具希望直接将其从VB转换为您的帮助。

vb.net vb.net-2010
1个回答
0
投票

您的“文本”是JSON。使用您选择的JSON解析器(google VB.NET解析JSON)加载它,循环访问matches数组,并从每个元素的http.host属性读取IP地址。

这里是一个示例,说明如何使用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而不是^...$,以便它匹配单词边界而不是字符串的开头/结尾。但是请注意,现在我们通过您提供的输入获得IP地址twice,因为这些地址不止一次存在:

62.176.84.198
62.176.84.198
197.214.169.59
197.214.169.59
46.234.76.75
46.234.76.75
...
© www.soinside.com 2019 - 2024. All rights reserved.