2011-01-28 213 views
2

正如圖片中看到,我們有IP地址的列表(請注意,128.3。*和131.243。*)是我們的子網內。我們更喜歡用Perl來完成它,任何其他好的想法都不止於* nix環境中的歡迎。提取IP地址

中的圖片的格式爲:

目的地IP(排序) - Dest_Port - 源IP-Source_Port

空間被用作隔板。

我們做手工,但知道我們有龐大的文件,要自動執行此過程。

的問題是,我們需要得到 目的IP地址(不是在我們的子網,而不是128.3。*和131.243。*),這是溝通 至少有3個不同的 IP地址(源) 我們子網 內(128.3。*和131.243。*)。

enter image description here

與至少3 不同源地址的示例117.72.15.207連通(未子網IP)在我們的子網(131.243.92.10,131.243.92.117和131.243.92.191)。請注意,它與131.243.92.117多於一個的源端口地址進行通信,因此它將只在輸出中計數一個源地址。我放了一顆星來指定條件。 我們需要誰METS這種情況下

59.69.194.12 80 131.243.93.74 4492 
59.79.35.247 80 131.243.94.123 1307 
59.100.23.87 80 131.243.92.72 45577 
*117.72.15.207 80 *131.243.92.10 451 
*117.72.15.207 80 *131.243.92.117 21071 
117.72.15.207 80 131.243.92.117 21072 
117.72.15.207 80 131.243.92.117 21073 
*117.72.15.207 80 *131.243.92.191 9248 

輸出將是IP對的列表:

117.72.15.207 80 131.243.92.10 451 
117.72.15.207 80 131.243.92.117 21071 
117.72.15.207 80 131.243.92.191 9248 

請評論,如果有任何不明白。謝謝...

+0

所以你想在Perl中做到這一點......你到目前爲止有什麼?更新您的帖子以包含代碼並指定您不明白的內容。否則,問題可能會被關閉。 – 2011-01-28 21:10:49

+0

@Jim Garrison,我們提取了IP地址和端口號,並將它們從跟蹤中排序,我對perl沒有任何瞭解,不確定這是否可以用其他方式完成,所以我在這裏發佈。 – berkay 2011-01-28 21:25:03

回答

1
#!/usr/bin/env perl 

use strict; 

my %ip_lookup; 
while (<DATA>) { 
    my ($dest_ip, $dest_port, $source_ip, $source_port) = (split ('\s+', $_)); 
    $ip_lookup{$dest_ip}{$source_ip} = $_ unless $ip_lookup{$dest_ip}{$source_ip}; 
} 

for my $dest_ip (keys %ip_lookup) { 
    if (scalar(keys %{$ip_lookup{$dest_ip}}) >= 3) { 
     print $_ for sort values %{$ip_lookup{$dest_ip}}; 
    } 
} 

__DATA__ 
9.69.194.12 80 131.243.93.74 4492 
59.79.35.247 80 131.243.94.123 1307 
59.100.23.87 80 131.243.92.72 45577 
117.72.15.207 80 131.243.92.10 451 
117.72.15.207 80 131.243.92.117 21071 
117.72.15.207 80 131.243.92.117 21072 
117.72.15.207 80 131.243.92.117 21073 
117.72.15.207 80 131.243.92.191 9248 

有幾種方法在Perl中做到這一點,但我上面張貼的樣本是簡單的解釋。

首先,它的讀取文件中的每一行(我使用的是數據句柄,但它會工作與相同文件),然後分割線來獲得不同的IP,端口的組合。

然後填充一個多層次的哈希值,除非這個目標 - 源IP組合以前已經見過(在不同的端口指向你做)。

最後,排序,並通過3個是否或源IP條目已經作出的每個目標IP打印出的線,如果這是真的檢查循環。

這將導致輸出:

117.72.15.207 80 131.243.92.10 451 
117.72.15.207 80 131.243.92.117 21071 
117.72.15.207 80 131.243.92.191 9248 

這是你需要什麼。