gpt4 book ai didi

c++ - C++正则表达式从特定行中获取IP

转载 作者:行者123 更新时间:2023-12-02 10:03:54 29 4
gpt4 key购买 nike

我正在开发一个C++程序,该程序需要从标准 Nmap输出中收集IP。由于我不想解释的原因,我不能使用-oX,-oG或-oA标志。我有以下正则表达式:

std::regex IPRegex("^Nmap scan report for ([\\S]*\\s\\()?(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");

我只是想从nmap输出的特定行中获取所有IP。但是,有时它们前面带有DNS名称,并用括号括起来,有时却没有,因此,这是我的正则表达式中的第一个可选捕获组。我也认识到,对于C++,我需要加倍反斜杠来转义正则表达式标记/字符串文字。

nmap输出示例:
Nmap scan report for mycomputer.mydomain (192.168.1.1)
Host is up (0.00013s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy

Nmap scan report for mycomputer2.mydomain (192.168.1.2)
Host is up (0.0085s latency).
All 1000 scanned ports on mycomputer2.mydomain (192.168.1.2) are closed

Nmap scan report for 192.168.1.3
Host is up (0.0057s latency).
All 1000 scanned ports on 192.168.1.3 are closed

我的想法是,我应该能够仅使用
std::sregex_iterator IPIter(output.begin(), output.end(), IPRegex);
std::sregex_iterator end;
while (IPIter != end) {
std::smatch match = *IPIter;
IPList += match.str(2); // Testing with match.str(0) had no matches at all either
IPIter++;
}

但是我根本没有正则表达式匹配。我使用regex101.com对此进行了测试,唯一的区别是我使用了单个反斜杠转义符,并且运行良好。我无法解决问题在我的C++程序中做同样的事情。我究竟做错了什么?

最佳答案

我认为您正在使此过程变得比所需的复杂。只需使用以下正则表达式:

Nmap scan report for .*\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b

您不需要专门匹配域名和括号之类的内容,只需使用 .*跳过它们即可。您无需处理一般的文本输入,因此不会因为精度不够而产生任何误报。 Nmap scan report除了行首以外不会出现在其他任何地方,因此您实际上不需要匹配 ^

关于c++ - C++正则表达式从特定行中获取IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61217180/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com