如何使用wireshark从tcpdump获取特定主机的连接数(计数)

时间:2012-03-22 07:31:13

标签: wireshark

我想检查连接池库为特定主机创建的连接数。我得到了tcpdump,从这个如何使用wireshark获得已建立连接的数量。我可以使用tcptrace工具来获取它,但我想知道如何使用wireshark。

2 个答案:

答案 0 :(得分:2)

多少可能是多少并发哪个会有点困难,但在数据包捕获过程中有多少更容易,而且因为你正在使用tcpdump,我会假设你就是这样正在寻找。

如果您的源IP是192.168.1.1并且目标主机是192.168.1.2,那么应用这样的过滤器:

ip.src_host == 192.168.1.1&& ip.dst_host == DESTADDRESS&& tcp.flags.syn == 1

如果您的问题中的目标主机可能也建立了与源主机的连接,那么源主机也将发送回SYN,ACK以接受这些连接,因此要将其过滤掉,请将其添加到结束:

&安培;&安培; tcp.flags.ack == 0

应用该过滤器时,仅显示新连接,然后您可以查看Wireshark底部的状态栏。它将显示总共有多个数据包,以及显示的数量。显示的数据包数量将是捕获期间建立的连接数。

如果您在任何给定时间寻找并发连接,Wireshark可能不是您的最佳选择,因为在这种情况下,您将查找在相应的FIN或RST之前发生的连接数(SYN)(结束时)连接),这更像是一种统计功能。

另外值得注意的是,如果捕获源位于源主机上,则不保证该捕获中的SYN /连接已被接受/成功。您还需要验证是否为每个连接执行了完整的三次握手,SYN,SYN-ACK,ACK。

答案 1 :(得分:0)

试试这个 - 它可能不是100% - 因为它只会看到与它们上的某些数据的连接 - 并假设一些理想主义的东西 - 但它对大多数情况来说足够好:

tcpdump -tt -n -r __file__ \
    | grep '\.10011' \
    | sed -e 's/^.*IP [^>]\+\.\([^ ]\+\) > 10.0.10.1.13000:.*$/\1:&/g' \
        -e 's/^.*IP 10.0.10.1.13000 > [^:]\+\.\([^ ]\+\): .*$/\1:&/g' \
    | sed -e 's/ IP .* > .*: Flags \[[^]]*S[^]]*\].*/:open/g' \
        -e 's/ IP .* > .*: Flags \[[^]]*[RF][^]]*\].*/:close/g' \
    | grep -v 'length 0' \
    | sed 's/ IP .* > .*: Flags .*/:isopen/g' \
    | gawk -F: 'BEGIN{ cons["x"]=1; }{ 
        if ( $3 == "open" || $3 == "isopen" ) { cons[$1] = 1; } 
        if ( $3 == "close" ) { delete cons[$1]; }; 
        printf("%s %s %s\n", strftime("%Y%m%dT%H%M%S",int($2)), $2, (length(cons) - 1) ); }' \
    | uniq -f 2

欣赏评论,修正或更正。注意 - 这将检查特定端口和IP(10.0.10.1.13000) - 您可以稍微调整一下以使其适用于任何端口和IP