我怎么能grep计数和sortingiptables日志获取IP数量和DPT? 就像我用这个线索来获得最高的IP数量。
egrep -w "Invalid Packet" ipfirewall.log | grep -o '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9]*' | sort | uniq -c | sort -r -n | head
但是如何通过DPT获取IP? 所以这将是:
250 192.168.1.1 DPT=3306 150 192.168.1.2 DPT=445 50 192.168.1.3 DPT=23 20 192.168.1.4 DPT=22
日志格式:
Jul 19 04:50:28 server1 kernel: IN=eth0 OUT= MAC=xx:xx SRC=124.153.186.56 DST=xx.xx.xx.xx LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=19312 DF PROTO=TCP SPT=4379 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 Jul 19 04:50:28 server1 kernel: IN=eth0 OUT= MAC=xx:xx SRC=124.153.186.56 DST=xx.xx.xx.xx LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=47534 DF PROTO=TCP SPT=2339 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0
– ==更新== –
我想我find了些东西
grep eth0 ipfirewall.log | sed -r 's/.*SRC=(\S+).*PROTO=(\S+).*DPT=(\S+).*/\1 \2 \3/' | sort | uniq -c | sort -r -n .... 5 98.169.236.61 UDP 47841 5 70.177.175.182 TCP 80 5 111.91.181.224 UDP 33468 4 74.82.169.171 TCP 135 4 61.191.56.198 TCP 1433 4 61.176.222.153 TCP 1433 4 61.155.203.4 TCP 1433 4 59.92.155.105 TCP 80 4 121.10.172.216 TCP 1433 4 119.148.162.42 TCP 1433 4 117.197.191.18 TCP 80 3 160.218.75.210 TCP 445 ....
这是python真正擅长的。
from collections import Counter with open('iptables.log', 'r') as log: ip_addresses = [] for line in log: valueList = line.split(' ') valueDict = { 'date':valueList[0]+valueList[1]+valueList[2], 'src_ip':valueList[8][4:] 'dst_ip':valueList[9][4:] } ip_addresses.append(valueDict['src_ip']) print(Counter(ip_addresses))
我确定你可以find一个class轮,但是这更容易编写和维护。
您可以使用awk来提取您感兴趣的字段,然后像以前一样使用sort和uniq 。
% awk '{print $9 " " $19}' log | sort | uniq -c | sort -gr | head 2 SRC=124.153.186.56 DPT=23
这假设所有日志消息中都存在所有字段,并且顺序相同。 如果情况并非如此,则可能需要使用适当的脚本语言,如Python或Ruby。