tcpdump是Linux下强大的抓包工具,不仅可以分析数据包流向,还可以对数据包内容进行监听。通过分析数据包流向,可以了解一条连接是如何建立双向连接的。
tcpdump允许用户(一般是root)拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。

 

1 用法及常用参数一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
tcpdump [-AennqX] [-i 接口] [-w 存储文件名] [-c 次数] [-r 文件] [所要抓取的数据包格式]
常用选项与参数:
-A    # 数据包的内容以ASCII显示,通常用来抓取WWW的网页数据包
-e    # 使用数据链路层(osi第2层)的MAC数据包数据来显示
-nn   # 直接以IP及port显示,而不用主机名与服务名显示
-q    # 列出较为简短的数据包信息,每一行内容比较精简
-X    # 列出十六进制(hex)以及ASCII数据包内容,对于监听数据包内容很有用
-i    # 后接要监听的网络接口,如eth0/eth1/lo/ppp0等
-w    # 后接文件名,将监听的数据包数据存储到文件中
-r    # 后接文件名,从文件中读出数据,这个文件必须存在,且是由-w所产生的
-c    # 监听的数据包数,如果没有这个参数,tcpdump会一直监听,直到按Ctrl+C为止
 
'host 127.0.0.1'   # 针对单台主机抓包
'net 192.168'      # 针对某个网络抓包
'src host 127.0.0.1' 'dst net 192.168'  # 同时加上源(src)和目标限制(dst)
'tcp port 21'      # 针对通信协议(tcp/udp/arp/ether)、端口检测
 
还可以利用and 与 or 进行数据包的整合显示

 

2 常用命令示例

 (1) 查看某块网卡的80端口数据包流向

[@bjzw_11_210 logs]# tcpdump -i eth1 port 80 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
13:47:06.904009 IP 10.149.35.123.52723 > 10.146.11.210.80: S 2680202536:2680202536(0) win 14600 <mss 1460>
13:47:06.904155 IP 10.146.11.210.80 > 10.149.35.123.52723: S 1981317955:1981317955(0) ack 2680202537 win 5840 <mss 1460>
13:47:06.905537 IP 10.149.35.123.52723 > 10.146.11.210.80: . ack 1 win 14600
13:47:06.905573 IP 10.149.35.123.52723 > 10.146.11.210.80: P 1:1045(1044) ack 1 win 14600
13:47:06.905579 IP 10.146.11.210.80 > 10.149.35.123.52723: . ack 1045 win 8352
13:47:06.908920 IP 10.146.11.210.80 > 10.149.35.123.52723: P 1:268(267) ack 1045 win 8352
13:47:06.908943 IP 10.146.11.210.80 > 10.149.35.123.52723: F 268:268(0) ack 1045 win 8352
......
13:47:09.275055 IP 10.148.40.118.64051 > 10.146.11.210.80: S 2641310142:2641310142(0) win 14600 <mss 1460,nop,wscale 8>
13:47:09.275080 IP 10.146.11.210.80 > 10.148.40.118.64051: S 1613833543:1613833543(0) ack 2641310143 win 5840 <mss 1460>
13:47:09.277054 IP 10.148.40.118.64051 > 10.146.11.210.80: . ack 1 win 14600
13:47:09.277094 IP 10.148.40.118.64051 > 10.146.11.210.80: P 1:894(893) ack 1 win 14600
13:47:09.277102 IP 10.146.11.210.80 > 10.148.40.118.64051: . ack 894 win 7144 530 packets captured <== 捕获的数据包数量
530 packets received by filter <== 通过过滤所得的总数据包数量
0 packets dropped by kernel <== 被内核所丢弃的数据包
[@bjzw_11_210 logs]#

分析其中标红哪行的含义(如果第一次看肯定看晕):

13:47:09.277094      捕获该数据包的时间,单位为“时:分:秒”;
IP 通信协议是IP;
10.148.40.118.64051 传送段的ip和端口分别是10.148.40.118和64051;
> 数据包的传输方向(流向);
10.146.11.210.80 接收端的ip和端口分别是10.146.11.210和80;
P
1:894(893) 该数据包带有PUSH传输标志,且传输的是整体数据的1~894 bytes;
ack 1 ack相关的资料;
win 14600 窗口大小为14600字节。

(2) 本机执行tcpdump -i lo -nn

摘出一行:

04:16:47.369125 IP 127.0.0.1.42878 > 127.0.0.1.22: Flags [S]【表明是syn建立连接包(即三次握手的第一次握手)】, seq 765824415【seq 序号】, win 43690 【窗口大小】, 
options【TCP首部可选字段】[mss 65495【表示mss是发送端(客户端)通告的最大报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)】,sackOK【发送端支持并同意使用SACK选项】,TS val 9866687 ecr 0,
nop,wscale 7【nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为7】], length 0

(3)监听eth0网卡,且通信协议为port22,目标数据来源为192.168.0.100的数据包的命令

tcpdump -i eth0 -nn 'port 22 and src host 192.168.0.100'

(4).监视指定主机的数据包,例如所有进入或离开longshuai的数据包

tcpdump host longshuai

(5).打印helios<-->hot或helios<-->ace之间通信的数据包

tcpdump host helios and \( hot or ace \)

(6).监视指定主机和端口的数据包

tcpdump tcp port 22 and host hostname

(7).对本机的udp 123端口进行监视(123为ntp的服务端口)

tcpdump udp port 123

示例:解析包数据

[root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)
192.168.100.1.5788 > 192.168.100.62.22: tcp 0
0x0000: 000c 2908 9234 0050 56c0 0008 0800 4500 ..)..4.PV.....E.
0x0010: 0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8 .(Kg@.@.....d...
0x0020: 643e 169c 0016 2426 5fd6 1fec 2b62 5010 d>....$&_...+bP.
0x0030: 0803 7844 0000 0000 0000 0000 ..xD........
12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)
192.168.100.1.5788 > 192.168.100.62.22: tcp 0
0x0000: 000c 2908 9234 0050 56c0 0008 0800 4500 ..)..4.PV.....E.
0x0010: 0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8 .(Kh@.@.....d...
0x0020: 643e 169c 0016 2426 5fd6 1fec 2d62 5010 d>....$&_...-bP.
0x0030: 0801 7646 0000 0000 0000 0000 ..vF........
2 packets captured
2 packets received by filter
0 packets dropped by kernel

tcpdump详解(转)的更多相关文章

  1. 【Network】TCPDUMP 详解

    参考资料: https://www.baidu.com/s?ie=UTF-8&wd=tcpdump%20%E6%8C%87%E5%AE%9Aip tcpdump非常实用的抓包实例:  http ...

  2. tcpdump 详解

    目录 简介 安装 参数详解 案例 监听指定主机的数据包 监视指定主机和端口的数据包 监视指定网络的数据包 监视指定协议的数据包 使用tcpdump抓取HTTP包 简介 用简单的话来定义tcpdump, ...

  3. Linux tcpdump 详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  4. tcpdump详解

    tcpdump -i eth1 'host 121.14.84.221 and greater 76' -Ap -v -s10000 抓取 eth1 和 121.14.84.221 上的所有长度大于7 ...

  5. linux下抓包工具tcpdump详解

    本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...

  6. 服务器抓包命令:tcpdump详解

    官网地址:http://www.tcpdump.org/tcpdump_man.html 简介: tcpdump,就是:dump the traffic on a network,根据使用者的定义对网 ...

  7. 调试利器之tcpdump详解

    简介你执行 man tcpdump 命令,你会看到文档中对tcpdump的说明是“dump traffic on a network”.可见,tcpdump是一个根据使用者的定义对网络上的数据包进行截 ...

  8. [转] Linux抓包工具tcpdump详解

    http://www.ha97.com/4550.html PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使 ...

  9. Linux抓包工具tcpdump详解

    tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpd ...

  10. TCPDUMP详解(续)

    TCPdump抓包命令  tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具.  tcp ...

随机推荐

  1. 多测师讲解自动化selenium___定位元素002___高级讲师肖sir

    高级自动化测试python+selenium教程手册 --高级讲师肖sir(Harm) 第 2 章8种定位方法 总结: selenium 的 webdriver 提供了八种基本的元素定位方法,前面六种 ...

  2. 工业级wifi模块

    工业级wifi模块 工业级wifi模块ZLSN7004是上海卓岚开发的一款高性能的Wifi.以太网转串口模块.与普通的wifi模块定位在低成本不同,7004定位在高稳定性.丰富功能,设计目标是面向对功 ...

  3. go sync.WaitGroup

    package mainimport ( "fmt" "sync")func say(i int ,wg *sync.WaitGroup) { defer wg ...

  4. docker19.03搭建私有容器仓库

    一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...

  5. 极简 Node.js 入门 - 5.3 静态资源服务器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  6. 【事件中心 Azure Event Hub】在Linux环境中(Ubuntu)安装Logstash的简易步骤及配置连接到Event Hub

    在文章([事件中心 Azure Event Hub]使用Logstash消费EventHub中的event时遇见的几种异常(TimeoutException, ReceiverDisconnected ...

  7. Java8中Stream 的一些用法

    数据结构和数据准备 @Data @AllArgsConstructor @NoArgsConstructor static class StreamItem { Integer id; String ...

  8. c++ 获取文件创建时间、修改时间、访问时间、文件内容长度

    int GetFileInfo(string& strPath, int& iCreateTime, int& iModifyTime, int& iAccessTim ...

  9. Linux配置阿里epl源

    去阿里云 有源仓库 阿里云镜像官方站点 https://developer.aliyun.com/mirror/ 先备份本机上的源 mv /etc/yum.repos.d/CentOS-Base.re ...

  10. linux ssh自动输入密码,expect使用

    想搞一个使用ssh登录批量ip地址执行命令,自动输入密码的脚本,但是ssh不能使用标准输入来实现自动输入密码,于是了解到了expect这个可以交互的命令 是什么 查看使用man查看expect,是这么 ...