• tcpdump


    tcpdump 功能说明: 截获网络数据包的包分析工具。
    tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析。
    它支持针对网络层、协议、主机、端口等的过滤,并支持与、或、非逻辑语句协助过滤有效信息。
    tcpdump命令工作时要先把网卡的工作模式切换到混杂模式(promiscuous mode)。
    因为要修改网络接口的工作模式,所以tcpdump命令需要以root的身份运行。
    
    
    参数选项
    -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 164
     
     
    04: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 连接和断开过程的案例
    正常的TCP连接的三个阶段。
    1.TCP三次握手
    2.数据传送
    3.TCP四次断开
    
    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



  • 相关阅读:
    实现Promise的first等各种变体
    js打乱数组的实战应用
    Vue单页面中进行业务数据的上报
    如何实现一个楼中楼的评论系统
    vue实现对表格数据的增删改查
    用CSS3实现无限循环的无缝滚动
    使用vue实现tab操作
    redis事务与关系型数据库事务比较
    优先队列原理与实现
    MySQL排序原理与案例分析
  • 原文地址:https://www.cnblogs.com/l10n/p/14189424.html
Copyright © 2020-2023  润新知