0x01 Tcpdump简介
1.tcpdump 是一个运行在呼吁行下的嗅探东西。它答允用户拦截和显示发送或收到过网络毗连到该计较机的TCP/IP和其他数据包。tcpdump 是一个在BSD许可证下宣布的自由软件。
2.tcpdump长短常强大的网络安详阐明东西,可以将网络上截获的数据包生存到文件以备阐明。可以界说过滤法则,只截获感乐趣的数据包,以淘汰输出文件巨细和数据包阐明时的装载和处理惩罚时间。
3.tcpdump 合用于大大都的类Unix系统 操纵系统:包罗Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在这些系统中,tcpdump 需要利用libpcap这个捕获数据的库。其在Windows下的版本称为WinDump;它需要WinPcap驱动,相当于在Linux平台下的libpcap。
0x02 Tcpdump用途
tcpdump可以或许阐明网络行为,机能和应用发生或吸收网络流量。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来辅佐你去掉无用的信息,从而利用户可以或许进一步找出问题的来源。
也可以利用 tcpdump 的实现特定目标,譬喻在路由器和网关之间拦截并显示其他用户或计较机通信。通过
tcpdump
阐明非加密的流量,如Telnet或HTTP的数据包,查察登录的用户名、暗码、网址、正在欣赏的网站内容,或任何其他信息。因此系统中存在网络阐明东西主要不是对本机安详的威胁,而是对网络上的其他计较机的安详存在威胁。
有许多用户喜欢利用柏克莱数据包过滤器来限制 tcpdump 发生的数据包数量,这样BPF会只把“感乐趣”的数据包到上层软件,可以制止从操纵系统 内核向用户态复制其他数据包,低落抓包的CPU的承担以及所需的缓冲区空间,从而淘汰丢包率。
注:这篇文章只涉及tcpdump的根基用法,请记着tcpdump比我描写的强大的多!
0x03 Tcpdump的安装
做好编译源措施前的筹备勾当
1.网上下载得到libpcap和tcpdump
http://www.tcpdump.org/
2.安装c编译所需包:apt-get install build-essential
3.安装 libpcap的前置:apt-get install flex,apt-get install
bison
4.安装libpcap。
tcpdump的利用必需有这库。
tar xvfz libpcap-1.7.3.tar.gz //解压
进入解压之后的文件目次
运行./configure //生成makefile文件`
make //举办编译
make install //安装 库文件默认安装在目次 /usr/lib,头文件默认安装在 /usr/include
5.安装tcpdump
tar xvfz tcpdump.4.7.4.tar.gz //解压
进入解压之后的文件目次,运行
./configure //生成makefile文件
make //举办编译
make install //安装 库文件默认安装在目次 /usr/lib,头文件默认安装在 /usr/include
测试是否乐成安装:呼吁行输入 tcpdump有网络信息显示!!
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z command ]
[ -Z user ] [ expression ]
0x04 Tcpdump的超具体利用呼吁
-A 以ASCII码方法显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包括
网页数据的数据包时, 可利便查察数据(nt: 即Handy for capturing web pages).
-c count
tcpdump将在接管到count个数据包退却出.
-C file-size
(nt: 此选项用于共同-w file 选项利用)
该选项使得tcpdump 在把原始数据包直接生存到文件中之前, 查抄此文件巨细是否高出file-size. 假如高出了, 将封锁此文件,
另创一个文件继承用于原始数据包的记录. 新建设的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.
该数字会从1开始跟着新建设文件的增多而增加. file-size的单元是百万字节(nt: 这里指1,000,000个字节,
并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计较所得, 即1M=1024 * 1024 = 1,048,576)
-d 以容易阅读的形式,在尺度输出上打印出编排过的包匹配码, 随后tcpdump遏制.(nt | rt: human readable, 容易阅读的,
凡是是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,寄义未知, 需增补)
-dd 以C语言的形式打印出包匹配码.
-ddd 以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的'count'前缀).
-D 打印系统中所有tcpdump可以在其长举办抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及大概的一个网络接口
描写. 个中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字取代flag), 来指定要在其上抓包的网络
接口.
此选项在不支持接口列表呼吁的系统上很有用(nt: 好比, Windows 系统, 或缺乏 ifconfig -a 的UNIX系统); 接口的数字
编号在windows 2000 或其后的系统中很有用, 因为这些系统上的接口名字较量巨大, 而不易利用.
假如tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为个中缺乏 pcap_findalldevs()函数.
-e 每行的打印输出中将包罗数据包的数据链路层头部信息
-E [email protected] algo:secret,...
可通过[email protected] algo:secret 来解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload,
IPsec 封装安详负载, IPsec可领略为, 一整套对ip数据包的加密协议, ESP 为整个IP 数据包或个中上层协议部门被加密后的数据,
前者的事情模式称为地道模式; 后者的事情模式称为传输模式 . 事情道理, 另需增补).
需要留意的是, 在终端启动tcpdump 时, 可觉得IPv4 ESP packets 配置密钥(secret).
可用于加密的算法包罗des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 可能没有(none).
默认的是des-cbc(nt: des, Data Encryption Standard, 数据加密尺度, 加密算法未知, 另需增补).
secret 为用于ESP 的密钥, 利用ASCII 字符串方法表达. 假如以 0x 开头, 该密钥将以16进制方法读入.
该选项中ESP 的界说遵循RFC2406, 而不是 RFC1827. 而且, 此选项只是用来调试的, 不推荐以真实密钥(secret)来
利用该选项, 因为这样不安详: 在呼吁行中输入的secret 可以被其他人通过ps 等呼吁查察到.
除了以上的语法名目(nt: [email protected] algo:secret), 还可以在后头添加一个语法输入文件名字供tcpdump 利用
(nt:即把[email protected] algo:secret,... 中...换成一个语法文件名). 此文件在接管到第一个ESP 包时会打开此
文件, 所以最好此时把赋予tcpdump 的一些特权打消(nt: 可领略为, 这样防御之后, 当该文件为恶意编写时,
不至于造成过大损害).
-f 显示外部的IPv4 地点时(nt: foreign IPv4 addresses, 可领略为, 非本机ip地点), 回收数字方法而不是名字.
(此选项是用来搪塞Sun公司的NIS处事器的缺陷(nt: NIS, 网络信息处事, tcpdump 显示外部地点的名字时会
用到她提供的名称处事): 此NIS处事器在查询非当地地点名字时,经常会陷入无尽的查询轮回).
由于对外部(foreign)IPv4地点的测试需要用到当地网络接口(nt: tcpdump 抓包时用到的接口)
及其IPv4 地点和网络掩码. 假如此地点或网络掩码不行用, 可能此接口基础就没有配置相应网络地点和网络
掩码(nt: linux 下的 'any' 网络接口就不需要配置地点和掩码, 不外此'any'接口可以收到系统中所有接口的
数据包), 该选项不能正常事情.
-F file
利用file 文件作为过滤条件表达式的输入, 此时呼吁行上的输入将被忽略.
-i interface
指定tcpdump 需要监听的接口. 假如没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已设置好的接口(不包罗 loopback 接口).
一但找到第一个切合条件的接口, 搜寻顿时竣事.
在回收2.2版本或之后版本内核的Linux 操纵系统上, 'any' 这个虚拟网络接口可被用来吸收所有网络接口上的数据包
(nt: 这会包罗目标是该网络接口的, 也包罗目标不是该网络接口的). 需要留意的是假如然实网络接口不能事情在'稠浊'模式(promiscuous)下,
则无法在'any'这个虚拟的网络接口上抓取其数据包.
假如 -D 符号被指定, tcpdump会打印系统中的接口编号,而该编号就可用于此处的interface 参数.
-l 对尺度输出举办行缓冲(nt: 使尺度输出设备碰着一个换行符就顿时把这行的内容打印出来).
在需要同时调查抓包打印以及生存抓包记录的时候很有用. 好比, 可通过以下呼吁组合来到达此目标:
``tcpdump -l | tee dat'' 可能 ``tcpdump -l > dat & tail -f dat''.
(nt: 前者利用tee来把tcpdump 的输出同时放到文件dat和尺度输出中, 尔后者通过重定向操纵'>', 把tcpdump的输出放到
dat 文件中, 同时通过tail把dat文件中的内容放到尺度输出中)
-L 列出指定网络接口所支持的数据链路层的范例退却出.(nt: 指定接口通过-i 来指定)
-m module
通过module 指定的file 装载SMI MIB 模块(nt: SMI,Structure of Management Information, 打点信息布局
MIB, Management Information Base, 打点信息库. 可领略为, 这两者用于SNMP(Simple Network Management Protoco)
协议数据包的抓取. 详细SNMP 的事情道理未知, 另需增补).
此选项可多次利用, 从而为tcpdump 装载差异的MIB 模块.
-M secret
假如TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描写), 则为其摘要的验证指定一个民众的密钥secret.
-n 差池地点(好比, 主机地点, 端标语)举办数字暗示到名字暗示的转换.
-N 不打印出host 的域名部门. 好比, 假如配置了此选现, tcpdump 将会打印'nic' 而不是 'nic.ddn.mil'.
-O 不启用举办包匹配时所用的优化代码. 当猜疑某些bug是由优化代码引起的, 此选项将很有用.
-p 一般环境下, 把网络接口配置为非'稠浊'模式. 但必需留意 , 在非凡环境下此网络接口照旧会以'稠浊'模式来事情; 从而, '-p' 的设与不设,
不能当做以下选现的代名词:
'ether host {local-hw-add}' 或 'ether broadcast'(nt: 前者暗示只匹配以太网地点为host 的包, 后者暗示匹配以太网地点为广播地点的数据包).
-q 快速(也许用'宁静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都较量简短.
-R 设定tcpdump 对 ESP/AH 数据包的理会凭据 RFC1825而不是RFC1829(nt: AH, 认证头, ESP, 安详负载封装,
这两者会用在IP包的安详传输机制中). 假如此选项被配置, tcpdump 将不会打印出'克制中继'域(nt: relay prevention field). 别的,
由于ESP/AH类型中没有划定ESP/AH数据包必需拥有协议版本号域,
所以tcpdump不能从收到的ESP/AH数据包中推导出协议版本号.
-r file
从文件file 中读取包数据. 假如file 字段为 '-' 标记, 则tcpdump 会从尺度输入中读取包数据.
-S 打印TCP 数据包的顺序号时, 利用绝对的顺序号, 而不是相对的顺序号.(nt: 相对顺序号可领略为, 相对第一个TCP 包顺序号的差距,
好比, 接管方收到第一个数据包的绝对顺序号为232323, 对付厥后吸收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2别离
暗示与第一个数据包的差距为1 和 2. 而假如此时-S 选项被配置, 对付厥后吸收到的第2个, 第3个数据包会打印出其绝对顺序号:
232324, 232325).
-s snaplen
配置tcpdump的数据包抓取长度为snaplen, 假如不配置默认将会是68字节(而支持网络接口分讨论(nt: NIT, 上文已有描写,
可搜索'网络接口分讨论'要害字找到哪里)的SunOS系列操纵系统中默认的也是最小值是96).
68字节对付IP, ICMP(nt: Internet Control Message Protocol,
因特网节制报文协议), TCP 以及 UDP 协议的报文已足够, 但对付名称处事(nt: 可领略为dns, nis等处事), NFS处事相关的
数据包会发生包截短. 假如发生包截短这种环境, tcpdump的相应打印输出行中会呈现''[|proto]''的符号(proto 实际会显示为
被截短的数据包的相关协议条理). 需要留意的是, 回收长的抓取长度(nt: snaplen较量大), 会增加包的处理惩罚时间, 而且会淘汰
tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.
把snaplen 配置为0 意味着让tcpdump自动选择符合的长度来抓取数据包.
-T type
强制tcpdump按type指定的协议所描写的包布局来阐明收到的数据包. 今朝已知的type 可取的协议为:
aodv (Ad-hoc On-demand Distance Vector protocol, 按需间隔向量路由协议, 在Ad hoc(点对点模式)网络中利用),
cnfp (Cisco NetFlow protocol), rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),
rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol),
tftp (Trivial File Transfer Protocol, 碎文件协议), vat (Visual Audio Tool, 可用于在internet 长举办电
视电话集会会议的应用层协议), 以及wb (distributed White Board, 可用于网络集会会议的应用层协议).
-t 在每行输出中不打印时间戳
-tt 差池每行输出的时间举办名目处理惩罚(nt: 这种名目一眼大概看不出其寄义, 如时间戳打印成1261798315)
-ttt tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单元)
-tttt 在每行打印的时间戳之前添加日期的打印
-u 打印出未加密的NFS 句柄(nt: handle可领略为NFS 中利用的文件句柄, 这将包罗文件夹和文件夹中的文件)
-U 使恰当tcpdump在利用-w 选项时, 其文件写入与包的生存同步.(nt: 即, 当每个数据包被生存时, 它将实时被写入文件中,
而不是等文件的输出缓冲已满时才真正写入此文件)
-U 符号在老版本的libcap库(nt: tcpdump 所依赖的报文捕捉库)上不起浸染, 因为个中缺乏pcap_cump_flush()函数.
-v 当阐明和打印的时候, 发生具体的输出. 好比, 包的保留时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性
检测, 好比对IP或ICMP包头部的校验和.
-vv 发生比-v更具体的输出. 好比, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.
-vvv 发生比-vv更具体的输出. 好比, telent 时所利用的SB, SE 选项将会被打印, 假如telnet同时利用的是图形界面,
其相应的图形选项将会以16进制的方法打印出来(nt: telnet 的SB,SE选项寄义未知, 另需增补).
-w 把包数据直接写入文件而不举办阐明和打印输出. 这些包数据可在随后通过-r 选项来从头读入并举办阐明和打印.
-W filecount
此选项与-C 选项共同利用, 这将限制可打开的文件数目, 而且当文件数据高出这里配置的限制时, 依次轮回替代之前的文件, 这相当
于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会呈现足够多并用来占位的0, 这可以利便这些
文件被正确的排序.
-x 当阐明和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包罗毗连层的头部).
总共打印的数据巨细不会高出整个数据包的巨细与snaplen 中的最小值. 必需要留意的是, 假如高层协议数据没有snaplen 这么长,
而且数据链路层(好比, Ethernet层)有填凑数据, 则这些填凑数据也会被打印.(nt: so for link layers that
pad, 未能跟尾领略和翻译, 需增补 )
-xx tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 个中包罗数据链路层的头部.
-X 当阐明和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包罗毗连层的头部).
这对付阐明一些新协议的数据包很利便.
-XX 当阐明和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 个中包罗数据链路层的头部.
这对付阐明一些新协议的数据包很利便.
-y datalinktype
配置tcpdump 只捕捉数据链路层协议范例是datalinktype的数据包
-Z user
使tcpdump 放弃本身的超等权限(假如以root用户启动tcpdump, tcpdump将会有超等用户权限), 并把当前tcpdump的
用户ID配置为user, 组ID配置为user首要所属组的ID(nt: tcpdump 此处可领略为tcpdump 运行之后对应的历程)
此选项也可在编译的时候被配置为默认打开.(nt: 此时user 的取值未知, 需增补)
0x05 Tcpdump表达式详解