【发布时间】:2014-08-30 06:01:40
【问题描述】:
要拆分的字符串如下所示:
192.168.1.254445.... 0000 0000 0010 = Flags: 0x002 (SYN)
这个字符串中有3位信息需要被拉到不同的变量中:
ip - 192.168.1.254
port - 445
flag - SYN
ip 是一个 ip 地址,因此它需要捕获完整的地址范围。 端口的长度可以是 1-4 位。 并且标志可以包含三个,三个字母字符,例如SYN 或 SYN、ACK 或 SYN、ACK、URG 等(例如数据包标志的不同组合。
我尝试使用带有 ( : ' ' 的拆分作为拆分,但是每当我输入 [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
这样会更容易吗?
任何建议都会很棒,
谢谢。
【问题讨论】:
-
你不能,因为没有办法知道ip的最后一个数字在哪里结束,端口号从哪里开始。对于您给出的示例,结果可以是:ip = 192.168.1.25,端口:4445。但也许您有更多关于这种格式的信息。
-
如果我设法将端口移动到(SYN)后面的末尾,那么可以完成吗?
-
是的,但是你将如何做出这个举动,这是同样的问题。
-
我已经更改了字符串从数据中的顺序,以便它可以在最后使用端口读取。
-
为什么不简单地使用分号作为分隔符:192.168.1.254:445(最常见的格式)。既然您似乎可以访问这些信息,为什么还需要正则表达式来提取信息?