1. tcpdump的基本原理
1.1 tcpdump starce 的区别
在本机中的进程的系统行为调用跟踪,starce 是一个很好的工具;但是在网络问题的调试中,tcpdump 应该是一个必不可少的工具;能清晰分析网络通信的信息。
默认情况下,tcpdump 不会抓取本机内部通讯的报文 ;根据网络协议栈的规定,对于报文,即使是目的地是本机(自己和自己通信),也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入内核,并且完成路由选择。【比如本机的TCP通信,也必须要socket通信的基本要素:src ip port dst port】
1.2 linux下tcpdump 抓包的基本原理
Linux 的抓包是通过
注册一种虚拟的底层网络协议来完成网络报文(准确的说是:网络设备)消息的处理权,
当网卡接收到一个网络报文后,它会遍历系统中所有已经注册的网络协议,例如:以太网协议、x25协议处理模块来尝试进行报文的解析处理。这一点和文件系统的挂载相似,就是让系统中所有已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。
当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该抓包模块就会趁机把报文完整的copy一份,然后把这个copy的数据给抓包模块(tcpdump)
tcpdump 具体的工作原理:协议的注册、网络层对接收报文的处理 :
http://tsecer.blog.163.com/blog/static/15018172012822114125900/
2. tcpdump 命令详解
2.1 tcpdump 命令的基本简介
- tcpdump :dump the traffic on a network 根据使用者的定义对网络上的数据包进行截获的分析工作;tcpdump 可以讲网络中传送的数据包的header完全截获下来进行分析;它支持对网络层(net IP 段)、协议(TCP/UDP)、主机(src/dst host)、网络或端口(prot)的过滤,并提供and、or、not 等逻辑语句来帮助你去掉无用的信息。
- tcpdump:默认情况下,sudo /usr/sbin/tcpdump 会监视 第一个网络接口 一般是eth0 的所有port 所有协议的 数据包
2.2 tcpdump 的主要选项
协议 | TCP,UDP,IP,ARP,RARP,ETHER,FDDI |
网络(net) | 192.168.0.0/16 IP网段 |
方向(host) | src,dst,src or dst,src and dst |
端口(prot) | 80 22 !22 9999 |
逻辑 | and,or,not &&,||,! |
- 协议:tcp udp ip arp rarp ether fddi 协议这选项要放在 前面,因为要过滤数据包
- 网络:net ip网段 tcpdump net 192.168.1.0/24 监听这个网段
- 方向:host 就是主机 src 是源主机、dst 是目的主机 or and 是逻辑 tcpdump host test.hostname
- 端口:port 指定tcpdump 监听的端口 tcpdump src 192.168.1.11 and port 80 监听源IP是192.168.1.11 的80端