tcpdump命令使用总结

目录:

1. 命令简介

2. 编译安装

3. 命令格式

4. 常用选项

5. 表达式介绍

6. 命令示例


一、命令简介

Tcpdump是一款用于截取网络分组,并过滤输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。 tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not等逻辑语句来帮助我们去掉无用的信息。

二、编译安装

前提:只有先安装好libpcap后,tcpdump安装才不会出问题。 
安装前的准备:使用本地光盘yum安装flex和bison

[[email protected] ~]# yum install flex bison

安装libpcap:

[[email protected] tools]# wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz
[[email protected] tools]# tar zxvf libpcap-1.8.1.tar.gz 
[[email protected] tools]# cd libpcap-1.8.1
[[email protected] libpcap-1.8.1]# ./configure
[[email protected] libpcap-1.8.1]# make && make install

然后开始安装tcpdump:

[[email protected] tools]# wget http://www.tcpdump.org/release/tcpdump-4.9.1.tar.gz 
[[email protected] tools]# tar zxvf tcpdump-4.9.1.tar.gz 
[[email protected] tools]# cd tcpdump-4.9.1
[[email protected] tcpdump-4.9.1]# ./configure
[[email protected] tcpdump-4.9.1]# make && make install

三、命令格式

tcpdump [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ]

四、常用选项

[[email protected] ~]# man 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 in|out|inout ]
        [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
        [ -W filecount ]
        [ -E [email protected] algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ --time-stamp-precision=tstamp_precision ]
        [ --immediate-mode ] [ --version ]
        [ expression ]
...

选项翻译如下:

-l:使标准输出变为缓冲行形式;
-c:抓包次数;
-nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;
-s :<数据包大小> 设置每个数据包的大小;
-i:指定监听的网络接口;
-r:从指定的文件中读取包;
-w:输出信息保存到指定文件;
-a:将网络地址和广播地址转变成名字;
-d:将匹配信息包的代码以人们能够理解的汇编格式给出;
-e:在输出行打印出数据链路层的头部信息;
-f:将外部的Internet地址以数字的形式打印出来;
-t:在输出的每一行不打印时间戳;
-v :输出稍微详细的报文信息;--vv则输出更详细信息。

五、表达式介绍

表达式指正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则会捕获该报文。如果没有给出任何条件,则会截获网络上所有的信息包。 
在表达式中一般有如下几种类型的关键字:

1. 关于类型的关键字: 

主要包括host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。

2. 确定传输方向的关键字: 

主要包括src,dst,dst or src,dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。如果没有指明 方向关键字,则缺省是src or dst关键字。

3. 协议的关键字:

主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。

4. 三种逻辑运算: 

与运算是‘and‘,‘&&‘; 或运算是‘or‘ ,‘||‘; 非运算是 ‘not ‘ ‘! ‘。

5. 其他重要的关键字:

gateway, broadcast, less(小于), greater(大于)

六、命令示例

1. 默认启动

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

[[email protected] ~]# tcpdump

2. 获取指定网络接口的数据包

如果不指定网卡,默认tcpdump只会监视本机的第一个网络接口。

[[email protected] ~]# tcpdump -i ens33

3. 打印所有进入或离开‘ames‘这台主机的数据包

[[email protected] ~]# tcpdump host ames
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:58:56.339806 IP ames.47460 > server.jotting.cn.domain: 18031+ A? ames.magedu.com. (33)
10:58:56.340324 IP ames.47460 > server.jotting.cn.domain: 14082+ AAAA? ames.magedu.com. (33)
10:58:56.340594 IP server.jotting.cn.domain > ames.47460: 18031 NXDomain 0/1/0 (93)
10:58:56.341291 IP server.jotting.cn.domain > ames.47460: 14082 NXDomain 0/1/0 (93)
10:58:56.341760 IP ames.48307 > server.jotting.cn.domain: 33925+ A? ames. (22)
...

也可以指定ip,例如截获所有 172.16.0.9 的主机收到的和发出的所有的数据包

[[email protected] ~]# tcpdump host 172.16.0.9

4. 截获eth0网卡10次收发所有数据包并将抓包结果保存到test文件,再读取test抓包结果文件

[[email protected] ~]# tcpdump -i ens33 -c 10 -w test
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
12 packets received by filter
0 packets dropped by kernel
[[email protected] ~]# tcpdump -r test
reading from file test, link-type EN10MB (Ethernet)
11:09:58.776309 IP ames.ssh > station26.jotting.cn.61368: Flags [P.], seq 4287612257:4287612405, ack 1274827487, win 251, length 148
11:09:58.776690 IP station26.jotting.cn.61368 > ames.ssh: Flags [.], ack 148, win 2053, length 0
11:09:58.782086 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.784033 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.786659 IP pxe33.jotting.cn.60491 > 239.255.255.250.ssdp: UDP, length 133
11:09:58.789438 IP 172.16.252.50.netbios-ns > 172.16.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
11:09:58.797115 IP 172.16.252.50.59388 > 239.255.255.250.ssdp: UDP, length 173
11:09:58.837599 IP 172.16.252.189.58166 > 239.255.255.250.ssdp: UDP, length 174
11:09:58.877108 IP pxe33.jotting.cn.49353 > station11.jotting.cn.ssh: Flags [.], ack 2053202339, win 11416, length 0
11:09:59.168665 ARP, Request who-has 192.168.0.1 tell 192.168.0.111, length 46
[[email protected] ~]#

5. 获取所有来访问80端口的数据包(指定端口范围:portrange1-1024)

[[email protected] ~]# tcpdump port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
11:14:08.219687 IP ames.40608 > 10.68.7.12.http: Flags [P.], seq 4065612137:4065612783, ack 1201464828, win 65280, length 646
11:14:08.244030 IP 10.68.7.12.http > ames.40608: Flags [.], ack 646, win 65535, length 0
11:14:27.824996 IP 10.68.7.12.http > ames.40608: Flags [P.], seq 1:11, ack 646, win 65535, length 10
11:14:27.825014 IP ames.40608 > 10.68.7.12.http: Flags [.], ack 11, win 65280, length 0
11:14:27.835376 IP ames.40608 > 10.68.7.12.http: Flags [P.], seq 646:652, ack 11, win 65280, length 6
11:14:27.859675 IP 10.68.7.12.http > ames.40608: Flags [.], ack 652, win 65535, length 0
11:14:34.741259 IP ames.40608 > 10.68.7.12.http: Flags [.], seq 652:3332, ack 11, win 65280, length 2680

6. 获取ip包中源地址是172.16.0.1的数据包(目的是dst)

[[email protected] ~]# tcpdump src 172.16.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:22.749614 IP server.jotting.cn.domain > station26.jotting.cn.53491: 43693 8/4/4 CNAME clients.l.google.com., CNAME clients-china.l.google.com., A 74.125.204.138, A 74.125.204.139, A 74.125.204.101, A 74.125.204.100, A 74.125.204.113, A 74.125.204.102 (321)
11:37:22.768044 IP server.jotting.cn.domain > ames.43197: 63175* 1/1/1 PTR station26.jotting.cn. (118)
11:37:22.770613 IP server.jotting.cn.domain > ames.48682: 37078* 1/1/1 PTR server.jotting.cn. (105)
11:37:22.772635 IP server.jotting.cn.domain > ames.48980: 11819 NXDomain* 0/1/0 (105)
11:37:27.766386 ARP, Request who-has ames tell server.jotting.cn, length 46
^C  ---> 按ctrl+c终止.
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

7. 获取主机172.16.252.47和主机172.16.0.1之间通信的数据包

[[email protected] ~]# tcpdump host 172.16.252.47 and 172.16.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
11:41:21.623567 IP server.jotting.cn.domain > ames.43836: 26320* 1/1/1 PTR server.jotting.cn. (105)
11:41:21.624211 IP ames.53567 > server.jotting.cn.domain: 27576+ PTR? 47.252.16.172.in-addr.arpa. (44)
11:41:21.667365 IP ames.45595 > server.jotting.cn.domain: 48898+ A? station26.jotting.cn. (41)
11:41:21.667657 IP ames.45595 > server.jotting.cn.domain: 3471+ AAAA? station26.jotting.cn. (41)
11:41:21.667946 IP server.jotting.cn.domain > ames.45595: 48898* 1/1/1 A 172.16.251.26 (94)
11:41:21.668210 IP server.jotting.cn.domain > ames.45595: 3471* 0/1/0 (89)
11:41:21.672773 IP ames.51764 > server.jotting.cn.domain: 21351+ A? station26.jotting.cn. (41)
11:41:21.673857 IP server.jotting.cn.domain > ames.51764: 21351* 1/1/1 A 172.16.251.26 (94)
...
^C
39 packets captured
42 packets received by filter
3 packets dropped by kernel
[[email protected] ~]#

8. 获取tcp协议并且源地址来访问80的端口

实验方法:我开了两个终端,一个用来通过循环语句执行curl命令,另一个用来抓包。

第一个终端执行如下python代码:

#!/usr/bin/python 
# coding: utf-8
import time
import os
for i in range(5):
    os.system(‘curl jotting.cn‘)
    time.sleep(0.5)

第二个终端执行tcpdump命令:

[[email protected] ~]# tcpdump tcp and src 172.16.252.47 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
13:09:50.403823 IP ames.34876 > 101.201.68.76.http: Flags [S], seq 2531480337, win 29200, options [mss 1460,sackOK,TS val 13321408 ecr 0,nop,wscale 7], length 0
13:09:50.409624 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 4100740743, win 229, options [nop,nop,TS val 13321414 ecr 222196798], length 0
13:09:50.409965 IP ames.34876 > 101.201.68.76.http: Flags [P.], seq 0:74, ack 1, win 229, options [nop,nop,TS val 13321414 ecr 222196798], length 74: HTTP: GET / HTTP/1.1
13:09:50.415583 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 384, win 237, options [nop,nop,TS val 13321420 ecr 222196804], length 0
13:09:50.416841 IP ames.34876 > 101.201.68.76.http: Flags [F.], seq 74, ack 384, win 237, options [nop,nop,TS val 13321421 ecr 222196804], length 0
13:09:50.424146 IP ames.34876 > 101.201.68.76.http: Flags [.], ack 385, win 237, options [nop,nop,TS val 13321429 ecr 222196811], length 0
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
[[email protected] ~]#

9. 获取主机123.118.168.155和除了123.125.37.230之外的所有ip包

[[email protected] ~]# tcpdump ip host 123.118.168.155 and ! 123.125.37.230

10. 截获长度大于1000数据包,对于DDOS攻击时,可以使用

[[email protected] ~]# tcpdump -i eth0 greater 1000

11. 过滤原物理主机地址为1C-39-47-AE-8A-5B的报头

[[email protected] ~]# tcpdump ether src 1C-39-47-AE-8A-5B

...

完!

时间: 2024-11-06 08:28:36

tcpdump命令使用总结的相关文章

tcpdump 命令参考手册

对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 tcpdump 和其中的所有标记:另一类管理员,他们仅了解基本的使用方法,剩下事情都要借助参考手册才能完成.出现这种情况的原因在于, tcpdump 是一个相当高级的命令,使用的时候需要对网络的工作机制有相当深入的了解. 在今天的文章中,我想提供一个快速但相当实用的 tcpdump 参考.我会谈到基本的和一些高级的使用方法.我敢肯定我会忽略一些相当酷的命令,欢迎你补充在评论部分. 在我们深入了解以前,最重要的是了解 t

tcpdump 命令

tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析. 语法 tcpdump (选项) 选项 -a:尝试将网络和广播地址转换成名称:  -c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作: -d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出:  -dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出:  -ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出

结合tcpdump命令对traceroute深入分析

昨天突然被问到traceroute的原理,一时竟也说不出来,有些命令平时虽然经常在用,但实际原理确并不了解,趁这次机会就来梳理一下. traceroute:是网络诊断中,用来分析IP包经过那些路由的命令. 学前知识: IP包中有个字段TTL,这个是最大跳转次数的字段,每经过一个路由器,值会-1,当值为0的时候,这个包就会被路由器丢弃,并返回ICMP-超时包给请求主机. 实现原理: 1.traceroute首先发出三个UDP包(发出三个主要是为了统计,这里可以不用太在意),其TTL的字段为1,目的

tcpdump 命令行抓包工具

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3898248.html 概述 tcpdump命令是Linux中的截包命令工具,强大且易于使用.tcpdump基于底层libpcap库开发,运行需要root权限. 基本使用与命令选项 例:截获主机收到和发出的所有数据包. 命令:tcpdump 说明: tcpdump截取包默认显示数据包的头部. 基础格式:时间 数据包类型 源

tcpdump命令使用实例

tcpdump是抓包命令,用于截取网络分组并输出分组内容,常用于网络问题分析和排查. tcpdump语法 tcpdump [-i 接口] [-nn] [-w 文件名] [-c 次数] [-Ae][-qX] [想要截取的数据内容] -i 指定监听的网络接口.默认为eth0 -A 以ASCII格式打印出所有分组,并将链路层的头最小化. -c 在收到指定的数量的分组后,tcpdump就会停止.如果没有这个参数,tcpdump会持续不断的监听,直到用户输入ctrl+c为止. -n 不把网络地址转换成名字

tcpdump命令--实用篇

//查看本机与mysql的操作命令 注意 -i any表示监听所有网络接口,我们也根据自身情况选择网络接口 #tcpdump -i any -w - dst port 3306 |strings //查看本机58895上与mysql的命令 注意 -i any 表示监听所有网络接口,我们需要根据自身情况选择网络接口 #tcpdump -i any -w - dst port 3306 and src port 58895 |strings 同理,也可以使用上面的命令,查看kafka,etcd,re

tcpdump命令行抓包(第一篇)

tcpdump可以获取流动在网卡上的数据 tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount

【讲清楚,说明白!】tcpdump命令行网络抓包工具

目录:(一)tcpdump命令(二)tcpdump筛选 (一)tcpdump命令(1.1)tcpdump是一个用于截取网络分组,并输出分组内容的工具.凭借强大的功能和灵活的截取策略,使其成为类Unix系统下用于网络分析和问题排查的首选工具.tcpdump支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等语句来帮助你去掉无用的信息.(1.2)tcpdump指令默认只抓取每个数据包的前68个字节,通常情况下会将TCP/IP以及二层包头信息会完整抓取的,如果需要做完整的数据包的

Linux tcpdump 命令详解与示例

命令概要 Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的.TcpDump 是 Linux 中强大的网络数据采集分析工具之一. 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. 作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一. TCPDump可以将网络中传送的数据包