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命令学习

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