2013-06-07 15:55:48 +0000 2013-06-07 15:55:48 +0000
51
51

监控特定端口上的TCP流量

我已经搜索了很久,但似乎无法找到一个工作的例子。

我已经用尽了netstat、nmap和tcptrack,但都不支持时间戳。

netstat -ano|grep 443|grep ESTABLISHED

我在玩这个:

tcptrack -i eth0 port 443

以及这个:

&001

但都不适合我的需要,因为我需要的是连接时间。:)

答案 (7)

73
73
73
2013-06-07 16:03:28 +0000

编辑*。年后,我还在为这个问题获得了上票。请不要选这个答案,在我看来,这里的使用iptables的答案要好得多。


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

&001 或者只选tcp-syn,或者只选tcp-ack(我猜是那一个),看你需要什么了。

33
33
33
2014-12-05 15:08:24 +0000

**你可以使用Linux内核中的iptables支持来实现这个功能。缺点是它需要root权限才能设置(但考虑到你说的是443端口,这是一个特权端口,你可能需要root权限才能使用大多数解决方案)。例如,在输入规则的情况下,日志条目可能看起来像这样:

Dec 5 09:10:56 hostname kernel: [1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=A.B.C.D DST=W.X.Y. Z LEN=52 TOS=0x00 PREC=0x00 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

你可以使用任何运行的日志监控工具来处理这些信息。如果你的syslog实现支持,你甚至可以将这些信息引导到一个单独的日志文件中,有效地满足了你将连接数据写到一个时间戳为秒的文件中的要求,而不需要额外的软件。

请注意,-I INPUT目标是一个非终结目标,这意味着任何跟随它的规则仍然会被评估,而数据包不会被LOG规则本身拒绝或接受。这使得LOG目标在调试防火墙规则时也很有用。

为了避免日志被淹没,可以考虑将LOG模块与之配合使用。详情请参见 iptables(8) man page。

26
26
26
2013-06-07 16:13:36 +0000

微秒分辨率

默认情况下,tcpdump实用程序将以微秒分辨率报告时间。例如:

$ sudo tcpdump -i any port 443

会显示类似于下面的输出:

12:08:14.028945 IP localhost.33255 > 本地host.https: Flags [S], seq 1828376761, win 43690, options [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], length 0 12:08:14.028959 IP localhost.https 〉 localhost.33255: Flags [R.], seq 0, ack 1828376762, win 0, length 0

参见 tcpdump(8),了解完整的 tcpdump 选项列表,以及 pcap-filter(7),了解可以使用的过滤器的完整语法。

5
5
5
2013-06-07 16:09:31 +0000

443是加密的流量–所以无论如何也很难在这个端口上做流量的头或尾:

你可以做

yum install ngrep或apt-get install ngrep

然后运行

ngrep -W byline -d any port 443 -q
2
2
2
2016-06-02 09:48:03 +0000

你可能还需要这个来监控其他机器的入站和出站数据包。

tcpflow -i eth0 -c port 7891

(选项-i用于提及网络,选项-c在控制台中打印数据包)。

1
1
1
2013-06-07 15:59:57 +0000

你可以使用tcpdump或Wireshark。

0
0
0
2017-05-26 11:08:35 +0000

如果你需要一个永久的解决方案,可以随时监控感兴趣的端口的流量,我建议使用QoS(linux中的tc命令),tc有点隐秘,没有文档,所以我用FireQoS来设置QoS和netdata来实时监控它。

查一下这个了解一下。 https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers