tcpdump命令学习

作者: Mr_Hospital | 来源:发表于2019-03-09 16:06 被阅读1次

(Proudly powered by QKQ)

centOS如何安装tcpdump?

A: 使用yum:

yum install tcpdump

tcpdump是用来干啥的?

A: 根据man tcpdump的输出:

tcpdump - dump traffic on a network
Tcpdump prints out  a  description  of the contents of packets on a network interface that match the boolean expression;

即将网络上的流量给倾倒(dump)出来。tcpdump会输出一个网络接口(interface)的包的内容的描述,用户可以通过一个bool表达式进行筛选。

tcpdump如何使用?

A: tcpdump的格式为:

       tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q|-P in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]

注意tcpdump的所有参数都是中括号,那么就是说所有参数都是可选的,不是必须得。如果直接输入tcpdump,不带任何参数,那么默认是将非loopback的interface的流量dump出来。

# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
13:02:14.134764 ARP, Request who-has gateway tell master, length 28
13:02:14.135047 ARP, Reply gateway is-at 52:54:00:12:35:02 (oui Unknown), length 46
13:02:14.135578 IP master.44918 > 192.168.0.1.domain: 62858+ PTR? 2.2.0.10.in-addr.arpa. (39)
13:02:14.142491 IP 192.168.0.1.domain > master.44918: 62858 NXDomain 0/0/0 (39)
13:02:14.143702 IP master.57567 > 192.168.0.1.domain: 63494+ PTR? 15.2.0.10.in-addr.arpa. (40)
13:02:14.150640 IP 192.168.0.1.domain > master.57567: 63494 NXDomain 0/0/0 (40)
13:02:14.150990 IP master.36347 > 192.168.0.1.domain: 7340+ PTR? 1.0.168.192.in-addr.arpa. (42)
13:02:14.157539 IP 192.168.0.1.domain > master.36347: 7340 NXDomain 0/0/0 (42)

tcpdump的常用命令有哪些?

A: 先来看看常用参数:

  • -A,将包内容展示位ASCII。适用于显示网页
  • -c count,接收到多少个包之后就退出
  • -D,打印系统中可用的interface,并且tcpdump可以用的interface
  • -e,打印链路层的header
  • -F,使用文件作为过滤条件
  • --version,打印版本信息
  • -i interface,指定监听的interface,如果未指定,则使用除loopback外index最小的interface。使用any,表示监听所欲interface
  • --immediate-mode,不对网络包进行缓存,系统接收到包之后立即给tcpdump。在直接打印包内容的情况下,默认就是这种模式,输入到文件的情况下,是缓存的模式
  • -n,不进行主机地址到名字的转换,可以避免DNS查询
  • -nn,不进行协议和端口号到名字的转换
  • -Q|-P direction,或者--direction=direction,可选值有in,out,inout,选择发送和接收
  • -q,安静模式
  • -r file,从文件读取包
  • -S,输出绝对的而不是相对的TCP序列号(sequence number)
  • -t,不打印timestamp
  • -tt,打印timestamp,其值为1970年1月1日 00:00:00开始的秒数
  • -ttt,打印当前行和上一行的时间差(毫秒级)
  • -v,打印更多信息
  • -vv,更多的信息
  • -w file,将原始包写入文件
  • -x,除了打印出包头,还打印出包的数据(除了链路层的头部)以hex的格式
  • -xx,打印出头部(header)和数据以及链路层的头部
  • -X(大写),打印头部和数据,以hex和ASCII的格式
  • -XX,打印头部和数据以及链路层头部,以hex和ASCII的格式

一些例子:

  • tcpdump -i eth0,监听eth0上的流量
  • tcpdump -c 5 -i eth0,仅接收eth0上的5个包
  • tcpdump -A -i eth0,以ASCII显示包内容
  • tcpdump -D,列出能监听的interface
  • tcpdump -XX -i eth0
  • tcpdump -w 0001.pcap -i eth0,保存到文件
  • tcpdump -r 0001.pcap,从文件读取
  • tcpdump -n -i eth0
  • tcpdump -i eth0 tcp,仅dump tcp包信息
  • tcpdump -i eth0 port 22,仅dump端口为22的包信息
  • tcpdump -i eth0 src 192.168.0.2,仅dump源地址为192.168.0.2的包信息
  • tcpdump -i eth0 dst 50.116.66.139,仅dump目的地址为50.116.66.139的信息

tcpdump的filter expression(过滤表达式)需要从man pcap-filter获取文档信息。filter expression包含了一个或者多个primitive。通常来讲primitive一般是一个或者多个qualifier跟上一个id(名字或者数字)。qualifier有三种类型:

  • type,表明了id的类型,可选值有host, net, port和portrange。比如host foo表示名字为foo的主机
  • dir,指定了流量流向(transfer direction)的源或者目的地,可选值有src,dst,src or dst, src and dst, ra, ta, addr1, addr2, addr3, and addr4。其中ra, ta, addr1, addr2, addr3和addr4仅对无线网络有用。举例src foo表示源是foo
  • proto,限制了协议类型,可选值有ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp和udp。如果没有指定,则默认包括所有协议。举例tcp port 21

除了上面这些qualifier之外,还有gateway,broadcast,less,greater及算术表达式。

允许的primitive有很多,笔者摘抄一些:

  • dst host <host>
  • src host <host>
  • host <host>,源或者目的地址为host
  • gateway <host>
  • dest net <net>,其中<net>可以是名字或者数字。表示网络包中含有该net的包。
  • dest port <port>,网络包中含有该端口的包
  • less <length>,包长度小于或者等于length
  • greater <length>,包长度大于或者等于length
  • tcp,tcp协议
  • udp,udp协议
  • icmp,icmp协议
  • ether broadcast,过滤是Ethernet广播的包
  • ip broadcast,ipv4的广播包
  • vlan [vlan_id],IEEE 802.1Q的VLAN包

tcpdump的输出是什么意思?

A: tcpdump的输出跟具体的协议是相关的,不同协议的输出可能不同:

时间

时间的格式是:hh:mm:ss.frac,跟内核时间是一致的

链路层的头部

如果使用了-e,那么链路层的头部会打印出来。在Ethernets,源地址、目标地址、协议和包长度会被打印,其他情况则不太相同,这里不再阐述。

ARP/RARP包

其输出具有自解释性,比如:

arp who-has 128.3.254.6 tell 128.3.254.68
arp reply 128.3.254.6 is-at 02:07:01:00:01:c4

IPv4包

IPv4的基本输出格式为:

tos <tos>, ttl <ttl>, id <id>, offset <offset>, flags [flags], proto <proto>, length <length> options (options)

对于TCP或者UDP,还会打印源地址、目的地址及端口信息。用>开分开源地址和目的地址。
TCP包的基本格式:

src > dst: Flags [tcpflags], seq data-seqno, ack ackno, win window, urg urgent, options [opts], length len

其中:

  • src,源地址
  • dst,目的地址
  • flags,为S(SYN), F(FIN), P(PUSH), R(RST), U(URG), W(ECN CWR), E(ECN_Echo), .(ACK), none的组合。
    (其余字段意思详见man tcpdump)

一个例子:

IP rtsg.1023 > csam.login: Flags [S], seq 768512:768512, win 4096, opts [mss 1024]
IP csam.login > rtsg.1023: Flags [S.], seq, 947648:947648, ack 768513, win 4096, opts [mss 1024]
IP rtsg.1023 > csam.login: Flags [.], ack 1, win 4096

rtsg源地址的1023端口给csam的login端口发送了包,是一个SYN包,包的sequence number是768512,没有data(因为没有data sequence number或者长度),格式是first:last(sequence number first up to but not including last.).
其中[.]表示是一个ACK flag。

UDP的包,其基本格式为:

actinide.who > broadcast.who: udp 84

主机actinide上的who端口给主机broadcast上的who端口发送了udp报文,其中含有84bytes的用户数据。

参考资料:
[1] man tcpdump
[2] https://www.tecmint.com/12-tcpdump-commands-a-network-sniffer-tool/
[3] man pcap-filter

相关文章

  • tcpdump命令详解

    linux命令之tcpdump 1、tcpdump命令简介 tcpdump命令是基于unix系统的命令行的数据报嗅...

  • tcpdump命令学习

    (Proudly powered by QKQ) centOS如何安装tcpdump? A: 使用yum: tcp...

  • tcpdump 正则过滤

    tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c ...

  • 测试物语:tcpdump

    HOW TO USE tcpdump采用命令行方式,它的命令格式为:tcpdump [ -adeflnNOpqSt...

  • 学习tcpdump

    之前一直用gui的wireshark进行抓包,现在学习一下命令行的tcpdump,做个记录。 简介 tcpdump...

  • tcpdump的基本命令和使用

    tcpdump的基本命令和使用 介绍   tcpdump是linux下的抓包命令, 可以指定网卡/port/hos...

  • 使用tcpdump查看HTTP请求响应

    tcpdump安装 在Ubuntu/Debian系统上,执行如下命令安装tcpdump工具: 在CentOS系统上...

  • tcpdump抓包命令

    tcpdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和...

  • linux 高级网络命令

    1、tcpdump命令 tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也...

  • tcpdump命令

    监视指定网络接口的数据包 tcpdump -i eth0 如果不制定网卡,默认监听第一个网络接口 监视指定主机的数...

网友评论

    本文标题:tcpdump命令学习

    本文链接:https://www.haomeiwen.com/subject/pjpspqtx.html