tcpdump的输出结果 总的的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数
16:53:01.883358 时间带有精确到微妙IP 表示这个包在网路层 , 是IP包phpmianshi.com.36822 > 10.66.151.82.6379 表示通信的流向 , 36822 是客户端 , 6379是服务器端flags 标志由S(SYN), F(FIN), P(PUSH, R(RST),W(ECN CWT(nt | rep:未知, 需补充))或者 E(ECN-Echo(nt | rep:未知, 需补充))组成[S] 表示这是一个SYN请求[S.] 表示这是一个SYN+ACK确认包[.] 表示这是一个ACK确认包[P] 表示这个是一个数据推送 , 可以是从服务器端向客户端推送 , 也可以从客户端向服务器端推[F] 表示这是一个FIN包 , 是关闭连接操作 , client/server都有可能发起[R] 表示这是一个RST包 , 与F包作用相同 , 但RST表示连接关闭时 , 仍然有数据未被处理 。可以理解为是强制切断连接win 29200是指滑动窗口大小length 29指数据包的大小 , 因为 SYN 包不带 TCP payload , 所有信息都在 TCP header , 所以length 为 0截获主机hostname发送的所有数据
tcpdump src host hostname
监视所有送到主机hostname的数据包
tcpdump dst host hostname监视指定协议的数据包
打印TCP会话中的的开始和结束数据包,
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin)!=0'想获取115.159.122.65.3306之间建立TCP三次握手中带有SYN标记位的网络包.
tcpdump -n -nn 'host 115.159.122.65 and port 3306 and tcp[tcpflags] & tcp-syn!=0'语法: proto [ expr : size]
Proto即protocol的缩写 , 它表示这里要指定的是某种协议名称 , 如ip,tcp,udp等 , 链路层协议 ether,fddi,tr,wlan,ppp,slip,link,网络层协议ip,ip6,arp,rarp,icmp , 传输层协议tcp,udp等 。
expr用来指定数据报字节单位的偏移量 , 该偏移量相对于指定的协议层 , 默认的起始位置是0;而size表示从偏移量的位置开始提取多少个字节 , 可以设置为
1、2、4,默认为1字节 。如果只设置了expr , 而没有设置size , 则默认提取1个字节 。比如ip[2:2] , 就表示提取出第3、4个字节;而ip[0]则表示提取ip协议头的
第一个字节 。在我们提取了特定内容之后 , 我们就需要设置我们的过滤条件了 , 我们可用的“比较操作符”包括:> , < , >= , <= , = , != , 总共有6个 。
举例:想截取每个TCP会话的起始和结束报文(SYN 和 FIN 报文), 而且会话中有一个远程主机.
tcpdump 'tcp[13] & 3 != 0 and not(src and dst net 172.16.0.0)' -nn如果熟悉tcp首部报文格式可以比较容易理解这句话 , 因为tcp偏移13字节的位置为2位保留位和6位标志位(URG,ACK,PSH,RST,SYN,FIN), 所以与3相与就可以得出
SYN,FIN其中是否一个置位1.
从上面可以看到在写过滤表达式时 , 需要我们对协议格式比较理解才能把表达式写对 。为了让tcpdump工具更人性化一些 , 有一些常用的偏移量 ,
可以通过一些名称来代替 , 比如icmptype表示ICMP协议的类型域、icmpcode表示ICMP的code域 , tcpflags 则表示TCP协议的标志字段域 。
更进一步的 , 对于ICMP的类型域 , 可以用这些名称具体指代:
icmp-echoreply,icmp-unreach, icmp-sourcequench, icmp-redirect,icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob,icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq,icmp-maskreply 。
而对于TCP协议的标志字段域 , 则可以细分为tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg 。
对于tcpdump 只能通过经常操作来熟练这些语句了 。
tcpdump 与wireshark
Wireshark(以前是ethereal)是windows下非常简单易用的抓包工具 。但在linux下很难找到一个好用的图形化抓包工具 。还好有Tcpdump 。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包 , 然后在Windows 里分析包 。
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
推荐阅读
- 地理标志产品,海南白沙绿茶入编中国地理标志产品大典
- Linux 建立本地yum源
- 网络防御-防火墙设置IP网段规则
- 同样的内核,为什么linux干净稳定,而android臃肿又乌烟瘴气?
- RedHat Linux系统U盘安装图文教程
- 大学|31岁中国老将火了!从野球场到德国联赛,此前在国内遭潜规则淘汰
- 陈乳中草茶是怎么样,龙芽草茶
- 茶道操作十三流程,学习中国正宗的茶道
- 地产广告公司排名大全
- 减肥多吃牛肉,推荐三款食谱
