从实时tcpdump捕获中提取唯一的IP

Car*_*los 1 awk tcpdump fflush

我正在使用以下命令从实时tcpdump捕获输出IP

sudo tcpdump -nn -q ip -l | awk '{print $3; fflush(stdout)}' >> ips.txt
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

192.168.0.100.50771
192.168.0.100.50770
192.168.0.100.50759
Run Code Online (Sandbox Code Playgroud)

需要两件事:

  1. 仅提取IP,而不提取端口。
  2. 生成具有唯一IP(无重复)的文件,并在可能的情况下进行排序。

先感谢您

Dav*_*zer 6

虽然我是 Awk 的忠实粉丝,但值得拥有替代品。考虑这个使用 cut 的例子:

  tcpdump -n ip | cut -d ' ' -f 3 | cut -d '.' -f 1-4 | sort | uniq
Run Code Online (Sandbox Code Playgroud)


And*_*kha 5

要从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
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过以下命令查看唯一的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) } }'
Run Code Online (Sandbox Code Playgroud)

这将在每个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
Run Code Online (Sandbox Code Playgroud)

输出示例:

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
Run Code Online (Sandbox Code Playgroud)

注意:确保您使用的是gawk。它不适用于mawk。