要拆分的字符串如下所示:
192.168.1.254445.... 0000 0000 0010 = Flags: 0x002 (SYN)
此字符串中有三位信息需要提取到不同的变量:
ip - 192.168.1.254
port - 445
flag - SYN
ip是一个ip地址,因此需要捕获全部地址。 端口长度可以是1-4位。 并且标志可以包含三个,三个字母的字符,例如SYN或SYN,ACK或SYN,ACK,URG等(例如,包标志的不同组合。
我尝试使用Split with(:''作为分割,但每当我输入[1]作为输出时它会创建一个
error - Index was outside the bounds of the array.
然后,我在查看C# RegEx string extraction:
时创建了此代码Regex pattern = new Regex(@"(<?ip>\d+)(<?port>\d+).... \d{4} \d{4} \d{4} \d{4} = Flags: \d{1}x\d{3} ((<?flag>\w+))");
Match match = pattern.Match(dst1);
string ip = (match.Groups["ip"].Value);
string port = (match.Groups["port"].Value);
string flag = (match.Groups["flag"].Value);
string dst = ip + port + flag;
listBox1.Items.Add(dst);
但是这不会在listBox1中返回任何值。
如果字符串更改为:
192.168.1.254.... 0000 0000 0010 = Flags: 0x002 (SYN)445
这样会更容易吗?
任何建议都会很棒,
感谢。
答案 0 :(得分:0)
对于此输入:
192.168.1.254... 0000 0000 0010 = Flags: 0x002 (SYN)445
...使用此:
(?<ip>(?:\d{1,3}\.){3}\d{1,3}).*Flags:\s\d{1}x\d{3}\s\((?<flag>\w+)\)(?<port>\d+)
...对于具有此格式端口的IP地址:
192.168.1.254:445... 0000 0000 0010 = Flags: 0x002 (SYN)
...使用此:
(?<ip>(?:\d{1,3}\.){3}\d{1,3}):(?<port>\d+).*Flags:\s\d{1}x\d{3}\s\((?<flag>\w+)\)