【功能说明】

tcpdump命令是一个截获网络数据包的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析。它支持针对网络层、协议、主机、端口等的过滤,并支持与、或、非逻辑语句协助过滤有效信息。
tcpdump命令工作时要先把网卡的工作模式切换到混杂模式(promiscuous mode)。因为要修改网络接口的工作模式,所以tcpdump命令需要以root的身份运行。

【语法格式】

tcpdump [option] [expression] 
tcpdump [选项]    [表达式]
表10-23 tcpdump 命令的参数选项及说明
参数选项            解释说明
-A                   以ASCII码的方式显示每一个数据包(不会显示数据包中链路层的头部信息)。在抓取包含网页数据的数据包时,可方便查看数据
-c<数据包数目>        接收到指定的数据包数目后退出命令
-e                   每行的打印输出中将包括数据包的数据链路层头部信息
-i<网络接口>         指定要监听数据包的网络接口
-n                  不进行DNS解析,加快显示速度
-nn                 不将协议和端口数字等转换成名字
-q                  以快速输出的方式运行,此选项仅显示数据包的协议概要信息,输出信息较短
-s<教据包大小>       设置数据包抓取长度,如果不设置则默认为68等节,设置为0则自动选择合适的长度来抓取数据包
-t                  在每行输出信息中不显示时间截标记
-tt                 在每行输出信息中显示无格式的时间载标记
-ttt                显示当前行与前一行的延迟
-tttt               在每行打印的时间戳之前添加日期
-ttttt              显示当前行与第一行的延迟
-v                  显示命令执行的详细信息
-vv                 显示比-v选项更加详细的信息
-vvv                显示比-vv选项更加详细的输出

使用范例

不加参数运行tcpdump命令监听网络。

[root@lewen ~]# tcpdump    #默认清况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
...使用tcpdump命令时,如果不输入过滤规则,则输出的数据量将会很大。 精简输出信息。[root@lewen ~]# tcpdump -q
04:08:32.963134 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963256 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.963325 IP 10.0.0.1.10662 > lewen.ssh: tcp 0
04:08:32.963390 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963492 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.964604 IP lewen.ssh > 10.0.0.1.10662: tcp 116[root@lewen ~]# tcpdump -c 5  #使用-c选项指定监听的数据包数量,这样就不需要使用Ctrl+C了。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:09:50.191752 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 3827665832:3827666044, ack 1911166938, win 274, length 212
04:09:50.192434 IP lewen.44182 > public1.alidns.com.domain: 5716+ PTR? 1.0.0.10.in-addr.arpa. (39)
04:09:50.245211 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 212, win 8212, length 0
04:09:50.257155 IP public1.alidns.com.domain > lewen.44182: 5716 NXDomain 0/1/0 (116)
04:09:50.258230 IP lewen.36787 > public1.alidns.com.domain: 45732+ PTR? 81.0.0.10.in-addr.arpa. (40)
5 packets captured
21 packets received by filter
0 packets dropped by kernel

监听指定网卡收到的数据包

[root@lewen ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:11:33.924611 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 651624, win 8209, length 0
04:11:33.924679 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651624:651884, ack 105, win 274, length 260
04:11:33.924776 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651884:652048, ack 105, win 274, length 164
04:11:33.924834 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652048, win 8207, length 0
04:11:33.924901 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652048:652308, ack 105, win 274, length 260
04:11:33.929182 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652308:652472, ack 105, win 274, length 164
04:11:33.931108 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652472, win 8212, length 0
04:11:33.931140 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652472:652636, ack 105, win 274, length 16404:11:33.931140:当前时间,精确到微秒。
IP lewen.ssh > 10.0.0.1.10662:从主机lewen的SSH端口发送数据到10.0.0.1的10662端口,“>”代表数据流向。
Flags[P.]:TCP包中的标志信息,S是SYN标志的缩写,F(FIN)、P(PUSH)、R(RST)、"."(没有标记)。
seq:数据包中的数据的顺序号。
ack:下次期望的顺序号。
win:接收缓存的窗口大小。
length:数据包长度。

监听指定主机的数据包

[root@lewen ~]# tcpdump -n host 10.0.0.1    #<=使用-n选项不进行DNS解析,加快显示地度。监听指定主机的关键字为host,后面直接接主机名或了IP地址即可。本行命令的作用是监听所有10.0.0.1的主机收到的和发出的数据包。[root@lewen ~]# tcpdump -n src host 10.0.0.1    #<-只监听从10.0.0.1发出的数据包,即源地址为10.0.0.1,关键字为src(source,原地址)。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:20:55.821984 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 3862927143, win 4106, length 0
20:20:55.866408 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 149, win 4105, length 0
20:20:55.907580 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 297, win 4105, length 0
20:20:55.950705 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 445, win 4104, length 0
20:20:55.991940 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 593, win 4103, length 0
20:20:56.032129 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 741, win 4103, length 0[root@lewen ~]# tcpdump -n dst host 10.0.0.1    #<==只监听10.0.0.1收到的数据包,即目标地址为10.0.0.1,关就字为dst(destination,目的地)。
20:22:13.074240 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506496:506660, ack 53, win 252, length 164
20:22:13.074331 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506660:506824, ack 53, win 252, length 164

监听指定端口的数据包

[root@lewen ~]# tcpdump -nn port 22       #使用-n选项不进行DNS解析,但是其会将一些协议、端口进行转换,比如22端口转为ssh。因此本例使用nn 选项。监听指定端口的关键字是port,后面接上端口号即可20:24:26.193100 IP 10.0.0.1.14389 > 10.0.0.7.22: Flags [.], ack 556296, win 4101, length 0
20:24:26.193225 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556296:556556, ack 105, win 252, length 260
20:24:26.193535 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556556:556720, ack 105, win 252, length 164

监听指定协议的数据包。

[root@lewen ~]# tcpdump -n arp      #<--监听ARP数据包,因此表达式直接写arp即可。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:26:43.219758 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:43.511133 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:44.224050 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:44.512986 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:45.230012 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46[root@lewen ~]# tcpdump -n icmp     #<-监听icmp数据包(想要查着下面的监拉数据,可以使用其他机器ping本机即可)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:27:31.377258 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 49207 unreachable, length 127
20:27:31.479590 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 48776 unreachable, length 135常见的协议关键字有ip、arp、icmp、tcp、udp等类型。 

多个过滤条件混合使用

前面的几种方法都是使用单个过滤条件过滤数据包,其实过滤条件可以混合使用,因为tcpdump命令支持逻辑运算符and(与)、or(或)、!(非)。[root@lewen ~]# tcpdump -n ip host 10.0.0.7 and ! 10.0.0.1    #<==获取主机10.0.0.7与所有主机(除了主机10.0.0.1之外)通信的ip数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:29:42.366445 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [S], seq 1999440710, win 29200, options [mss 1460,sackOK,TS val 75899232 ecr 0,nop,wscale 7], length 0
20:29:42.366483 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [S.], seq 920922656, ack 1999440711, win 28960, options [mss 1460,sackOK,TS val 80531477 ecr 75899232,nop,wscale 7], length 0
20:29:42.366628 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 0
20:29:42.366674 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:15, ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 14
20:29:42.366681 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [.], ack 15, win 227, options [nop,nop,TS val 80531477 ecr 75899232], length 0
20:29:42.371129 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [S], seq 2767440940, win 29200, options [mss 1460,sackOK,TS val 75899236 ecr 0,nop,wscale 7], length 0
20:29:42.371153 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51644: Flags [S.], seq 3632462468, ack 2767440941, win 28960, options [mss 1460,sackOK,TS val 80531482 ecr 75899236,nop,wscale 7], length 0
20:29:42.371313 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899237 ecr 80531482], length 0
20:29:42.371397 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:25, ack 1, win 229, options [nop,nop,TS val 75899237 ecr 8

利用tcpdump抓包详解tcp/ip 连接和断开过程的案例。

1)正常的TCP连接的三个阶段。
  1. TCP三次握手
  2. 数据传送
  3. TCP四次断开
2)TCP连接图示。
TCP连接的状态机制如图10-6所示。
3)TCP的状态标识。
  • SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
  • ACK:(确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收了所有的数据。
  • FIN:(结束标志,FINish)用来结束一个TCP回话。但对应端口仍然处于开放状态,准备接收后续数据。
There are 8 bits in the control bits section of the TCe header:
CWR | ECE | URG | ACK| PSH | RST|SYN|FIN
[root@doit ~]# tcpdump tcp dst port 80 or src 104.243.30.169 -i eth0 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:35:59.136119 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2702154317:2702154529, ack 1793279353, win 501, length 212
20:35:59.136535 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 212:408, ack 1, win 501, length 196
20:35:59.137177 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 408:588, ack 1, win 501, length 180
20:35:59.137818 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 588:768, ack 1, win 501, length 180
20:35:59.138447 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 768:948, ack 1, win 501, length 180
20:35:59.139087 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 948:1128, ack 1, win 501, length 180
20:35:59.139729 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1128:1308, ack 1, win 501, length 180
20:35:59.140360 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1308:1488, ack 1, win 501, length 180
20:35:59.140996 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1488:1668, ack 1, win 501, length 180
20:35:59.141636 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1668:1848, ack 1, win 501, length 180
20:35:59.142273 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1848:2028, ack 1, win 501, length 180
20:35:59.142908 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2028:2208, ack 1, win 501, length 180

10.22 tcpdump:监听网络流量相关推荐

  1. Linux 命令之 tcpdump -- 监听网络流量

    文章目录 命令介绍 参考文档 命令介绍 tcpdump 命令是一款 sniffer 工具,是 Linux 上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump 命令工作 ...

  2. 在linux中使用tcpdump命令 – 监听网络流量

    tcpdump命令 – 监听网络流量 tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的 ...

  3. 监听网络流量命令——tcpdump

    监听网络流量命令--tcpdump 一.tcpdump简介 二.格式 三.常用参数 四.示例 一.tcpdump简介 tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可 ...

  4. 使用Java监听网络流量

    使用 JPCAP抓包,可以使用JAVA写代码对数据进行分析,最后可视化显示; 本文只实现了使用 Java语言的jpcap接口 在 IDEA环境下抓取数据包的功能 一.Java搭建 winpcap开发环 ...

  5. linux监控某个端口流量抓包,tcpdump命令 – 监听网络流量

    tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的工作模式切换到混杂模式.所以tcpdu ...

  6. IOS-网络(监听网络状态)

    1 // 2 // BWNetWorkTool.h 3 // IOS_0131_检测网络状态 4 // 5 // Created by ma c on 16/1/31. 6 // Copyright ...

  7. DHS警告:使用安全软件监听HTTPS流量可能会削弱网络安全

    当前已经越来越多的网站和流量使用加密的HTTPS进行连接,采用HTTPS加密连接可以防止攻击者采用中间人的方式窃取用户浏览器与网站服务器之间的通讯数据.相对于HTTP来说更多的用户会相信浏览器标记绿色 ...

  8. Android实时监听网络状态

    Android开发实时监听网络状态变化一般有两种方法: 1. 新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页 ...

  9. 初识广播机制(监听网络状态的改变,监听网络是否可以使用)

    Android系统中的广播机制比较灵活,因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应 ...

最新文章

  1. Exchange 2013sp1邮件系统部署-(七)
  2. android bootloader阶段GPIO的控制
  3. 15个学习习惯,受益一生(强烈推荐)
  4. 森拓品牌邀您参加第15届中国模具之都博览会
  5. 计算机英语口试,英语口试面对“电脑考官”有哪些临场应试技巧
  6. java之设计模式工厂三兄弟之简单工厂模式
  7. 20191011每日一句
  8. 移动办公——千脑云电脑 在线存储,中国人的在线办公室
  9. Idea中jclasslib的安装与使用
  10. python教程五(imput和while)
  11. 阿里企业邮箱使用第三方客户端同步邮件的坑
  12. jvm如何排查生产环境cpu飙高的问题
  13. Python使用在线接口SDK模块(baidu-aip)实现人脸识别
  14. 自制舵机(伺服电机)控制系统的一点感想
  15. BUUCTF-千层套路(python脚本)
  16. cd命令回到上级目录和回到根目录
  17. XUI 熟练使用之(三) -----------启动页( SimpleGuideBanner的使用)
  18. android平板吃鸡开什么画质,ipad2018玩吃鸡可以开什么画质 | 手游网游页游攻略大全...
  19. 程序员的职业发展规划
  20. 服装ERP系统在工业4.0“+”互联网+的处境

热门文章

  1. 浏览器的referer是服务器修改的吗,利用浏览器调整http的referer
  2. JRebel : java.lang.OutOfMemoryError: PermGen space 异常
  3. java 数组group by_java Group by分组算法
  4. mysql 编程处理数据类型_Mysql支持的数据类型(总结)
  5. Pytorch笔记:维度dim的定义及其理解使用
  6. 利用图基Tukey method检测数据集中的异常值
  7. Matplotlib 可视化之箭头与标注的高级应用
  8. 谷歌大一统?Fuchsia OS已可提供完整的Chrome浏览器体验
  9. 轻松解决Python “字符编码”,玩儿爬虫的朋友最爱这个库!
  10. 【开源】高颜值 功能强大的开源Markdown编辑器