码迷,mamicode.com
首页 > 其他好文 > 详细

了解tcpdump

时间:2018-03-08 17:30:26      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:tcpdump、wireshark

tcpdump的工作原理:

    telnet、ftp等应用程序,其网络通信收发数据,会通过完整的Linux网络协议栈,由Linux操作系统完成数据的封装和解封装,应用程序只需要对应用层数据进行读写即可。

    tcpdump这一类程序则依赖libpcap。libpcap使用的是一种称为设备层的包接口技术。这种技术使得应用程序可以直接读写内核驱动层面的数据,而不经过Linux网络协议栈。

    以上,可以看出tcpdump和iptables的关系:

        tcpdump直接从网络驱动层面抓取数据。不经过任何Linux网络协议栈。iptables依赖的netfilter模块工作在Linux网络协议栈中。因此iptables的入栈策略不会影响到tcpdump抓取数据。

        应用程序对外发送的数据包会先经过Linux网络协议栈,再到达网络驱动设备。因此,iptables的出栈策略会影响数据包发送到网络驱动设备层面,影响tcpdump抓取数据。

技术分享图片


tcpdump常用参数和过滤器:

    5个参数:

        -i参数: 指定需要抓包的网卡。如果未指定,tcpdump会根据搜索到的系统中状态为UP的最小数字的网卡,一般情况下是eth0。

        -nnn参数: 禁止tcpdump展示时,将IP和端口转换为域名、端口对应的指明服务名称。

        -s参数: 指定抓取的数据包的大小。使用-s 0指定数据包大小为262144字节,可以使得抓到的数据包不被截断,完整反映数据包的内容。

        -c参数: 指定抓取的数据包的数量。

        -w参数: 指定抓取的数据包保存到相应的文件。

    过滤器:

        host x.x.x.x: 指定抓取本机和主机x.x.x.x的通信数据。

        tcp port x: 指定抓取TCP协议源端口或目的端口为x的通信数据。

        icmp: 仅抓取icmp协议的通信数据。

        !: 反向匹配。例如port !22,抓取非22端口的通信数据。

    可以使用and或or进行组合:

        host x.x.x.x and tcp port x:只抓取本机和主机x.x.x.x之间基于TCP的源端口或者目的端口是x的通信。

        tcp port x or icmp:抓取TCP协议目的端口或者源端口为x的数据通信或者ICMP协议的数据通信。

    例子,通过wget请求www.example.com,使用tcpdump抓取通信过程中的数据包,如下:

# tcpdump host www.example.com -i eth0 -nnn -s 0 -w example.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C14 packets captured
18 packets received by filter
0 packets dropped by kernel

    保存的example.pcap文件可以使用wireshark打开进行分析。

    


了解tcpdump

标签:tcpdump、wireshark

原文地址:http://blog.51cto.com/13568014/2084226

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!