【问题标题】:Extract IP Addresses from JSON file using VB.net使用 VB.net 从 JSON 文件中提取 IP 地址
【发布时间】:2023-03-16 08:53:01
【问题描述】:

有没有办法使用 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 转换为提前感谢您的帮助。

【问题讨论】:

  • 您的“文本”是 JSON。使用您选择的 JSON 解析器 (google VB.NET parse JSON) 加载它,遍历 matches 数组并从每个元素的 http.host 属性中读取 IP 地址。
  • 嗨@CherryDT,谢谢你的回答,但这不是我期望做的,我不想过去,例如文本框中的这个 JSON 文本,当我单击转换为 ipv4 时,他更改了文本框进入这个结果,例如 pastebin.com/raw/8L8Ckrwi 类似于这个只有没有 {} 的 ipv4 和东西无论如何谢谢你
  • 是的,但这正是我所说的:你会从文本框中读取 JSON 文本,将其解析为一个对象,循环其上的 matches 数组并推送 http.host 的每个元素(即 IP)放入一个数组中,然后您将使用换行符加入该数组并再次将其放入文本框中。然后你得到你描述的结果。
  • 除非你当然想接受任何类型的文本作为输入,然后盲目地获取任何看起来像IP地址的东西,在这种情况下你可以使用正则表达式(谷歌VB.NET IP regex 看看我的意思)。但是,如果您始终以这种格式获取输入,我建议您正确解析它。

标签: vb.net vb.net-2010


【解决方案1】:

您的“文本”是 JSON。使用您选择的 JSON 解析器(谷歌 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 地址的 任何内容,而不管输入格式如何(即使您只是在文本框中输入 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 地址,因为这些地址不止一次存在:

62.176.84.198
62.176.84.198
197.214.169.59
197.214.169.59
46.234.76.75
46.234.76.75
...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多