从live tcpdump capture中提取唯一的IP

时间:2018-04-13 23:32:38

标签: awk tcpdump fflush

我使用以下命令从live tcpdump capture

输出IP
sudo tcpdump -nn -q ip -l | awk '{print $3; fflush(stdout)}' >> ips.txt

我得到以下输出

192.168.0.100.50771
192.168.0.100.50770
192.168.0.100.50759

需要两件事:

  1. 仅提取IP,而不是端口。
  2. 生成具有唯一IP的文件,不重复,如果可能,则进行排序。
  3. 提前谢谢

3 个答案:

答案 0 :(得分:3)

要从tcpdump中提取唯一的IP,您可以使用:

awk '{ ip = gensub(/([0-9]+.[0-9]+.[0-9]+.[0-9]+).*/,"\\1","g",$3); if(!d[ip]) { print ip; d[ip]=1; fflush(stdout) } }' YOURFILE

因此,您实时查看唯一IP的命令是:

sudo tcpdump -nn -q ip -l | awk '{ ip = gensub(/([0-9]+.[0-9]+.[0-9]+.[0-9]+)(.*)/,"\\1","g",$3); if(!d[ip]) { print ip; d[ip]=1; fflush(stdout) } }'

这将打印每个IP,一旦它们出现就立即输出,因此无法对它们进行排序。如果要对它们进行排序,可以将输出保存到文件中,然后使用sort工具:

sudo tcpdump -nn -q ip -l | awk '{ ip = gensub(/([0-9]+.[0-9]+.[0-9]+.[0-9]+)(.*)/,"\\1","g",$3); if(!d[ip]) { print ip; d[ip]=1; fflush(stdout) } }' > IPFILE
sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4  IPFILE

示例输出:

34.216.156.21
95.46.98.113
117.18.237.29
151.101.65.69
192.168.1.101
192.168.1.102
193.239.68.8
193.239.71.100
202.96.134.133

答案 1 :(得分:2)

虽然我是一个巨大的Awk粉丝,但值得拥有其他选择。使用cut:

考虑这个例子
  tcpdump -n ip | cut -d ' ' -f 3 | cut -d '.' -f 1-4 | sort | uniq

答案 2 :(得分:1)

这是一个使用match(在macOs中工作)

sudo tcpdump -nn -q ip -l | \
    awk '{match($3,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); \
    ip = substr($3,RSTART,RLENGTH); \
    if (!seen[ip]++) print ip }'

如果想要预先过滤输入,可以使用以下内容:

sudo tcpdump -nn -q ip -l | \
    awk '$3 !~ /^(192\.168|10\.|172\.1[6789]|172\.2[0-9]\.|172\.3[01]\.)/ \
    {match($3,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); \
    ip = substr($3,RSTART,RLENGTH); \
    if (!seen[ip]++) print ip }'