2014-08-29 31 views
0

字符串分裂看起來像這樣:正則表達式的表達 - 字符串分割到三個變量

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作爲分割,但每當我將[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); 

但這返回爲ListBox沒有值

如果字符串更改爲:

192.168.1.254.... 0000 0000 0010 = Flags: 0x002 (SYN)445 

會更容易嗎?

任何建議將是偉大的,

謝謝。

+1

你不能,因爲沒有辦法知道在哪裏完成IP的最後一個號碼,並且在哪裏開始端口號。對於您給出的示例,結果可能是:ip = 192.168.1.25,端口:4445.但也許有關於此格式的更多信息。 – 2014-08-29 20:41:19

+0

如果我設法將端口移動到(SYN)後面,那麼它可以完成嗎? – Taz 2014-08-29 20:41:53

+0

是的,但你將如何做出這一舉動,這是同樣的問題。 – 2014-08-29 20:48:00

回答

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+)\) 
+0

剛剛在端口用端口號測試了第一個正則表達式。它適用於包含一個標誌的所有數據,例如(SYN),但有一些包含(SYN,ACK)或(RST,ACK)。無論如何,要適應這個表達,包括這些? – Taz 2014-08-29 22:32:31

+0

你應該可以用一個簡單的字符類來完成它(即,改變\ w +到[\ w,] +)。我調整了表達式(等待管理員批准),但尚未對其進行測試。 – Colin 2014-08-30 03:39:21

相關問題