抓包工具

总结一句命令:

tcpdump   -vvX -s 0 -w  aaa.cap  -i  eth0 port 8080 and src host 172.21.11.97

aaa.cap 为包名
8080 为本服务端口
172.21.11.97  为通信主机

至于高价点的可以往下看

Tcpdump 与Wireshark组合抓包分析

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具,我们一般采用Tcpdump抓包命令的方式实现抓包,然后用Wireshark来进行分析。用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

tcpdump tcp -w ./target.cap -i eth0 -t -s 0 -c 100 anddst port ! 22 and src net 192.168.1.0/24

Ø  tcp: ip icmp arp rarp 和tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

Ø  -w ./target.cap : 保存成cap文件,路径为./(root目录下),文件名为target,方便用Wireshark分析。

Ø  -i eth0 : 只抓经过接口eth0的包

Ø  -t : 不显示时间戳

Ø  -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包

Ø  -c 100 : 只抓取100个数据包

Ø  dst port ! 22 : 不抓取目标端口是22的数据包

Ø  src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24

1.1  Tcpdump命令说明

1.1.1    Tcpdump简介

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

1.1.2    命令使用

tcpdump采用命令行方式,它的命令格式为:

tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
           [ -C file_size ] [ -F file ]
           [ -i interface ] [ -m module ][ -M secret ]
           [ -r file ] [ -s snaplen ] [-T type ] [ -w file ]
           [ -W filecount ]
           [ -E spi@ipaddralgo:secret,...  ]
           [ -y datalinktype ] [ -Z user]
           [ expression ]

1.1.2.1        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)

-i  interface
    指定tcpdump 需要监听的接口.  如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.

   
-n  不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.

-q  快速打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.

-r  file
    从文件file 中读取包数据. 如果file 字段为 '-' 符号, 则tcpdump 会从标准输入中读取包数据.

-s  snaplen
    设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节,需要注意的是, 采用长的抓取长度, 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下,抓取长度越小越好.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.

-t     在每行输出中不打印时间戳

-w    把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.

-W    filecount
      此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.

-x    当分析和打印时,tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如,Ethernet层)有填充数据, 则这些填充数据也会被打印.

 -xx   tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据,其中包括数据链路层的头部.

1.1.2.2        tcpdump条件表达式

该表达式用于决定哪些数据包将被打印. 如果不给定条件表达式, 网络上所有被捕获的包都会被打印,否则只有满足条件表达式的数据包被打印。表达式由一个或多个'表达元'组成。一个表达元通常由一个或多个修饰符后跟一个名字或数字表示的id组成.有三种不同类型的修饰符:type, dir以及 proto.

type 修饰符指定id 所代表的对象类型, id可以是名字也可以是数字. 可选的对象类型有: host, net, port 以及portrange(nt: host 表明id表示主机, net 表明id是网络, port 表明id是端口,而portrange表明id 是一个端口范围).  例如:

 'host foo', 表示主机 foo

 'net 128.3', 表示网络 128.3

 'port 8080', 表示端口 8080

'portrange 6000-6008表示端口范围 6000-6008

 如果不指定type 修饰符, id默认的修饰符为host.

dir 修饰符描述id 所对应的传输方向, 即发往id 还是从id 接收(nt: 而id 到底指什么需要看其前面的type 修饰符).可取的方向为: src, dst, src 或 dst, src并且dst.

例如:

src foo, 表示符合条件的数据包中, 源主机是foo

dst net 128.3, 表示目的网络是128.3

src or dst port ftp-data表示源或目的端口为 ftp-data

如果不指定dir修饰符, id 默认的修饰符为src 或 dst.

 
proto 修饰符描述id 所属的协议.可选的协议有: ether, fddi, tr, wlan, ip, ip6, arp, rarp,decnet, tcp以及 udp.

例如,

`ether src foo', 表示从以太网地址foo 来的数据包

 `arp net 128.3', 表示  发往或来自128.3网络的arp协议数据包

`tcp port 21', 表示发送或接收端口为21的tcp协议数据包

`udp portrange 7000-7009'表示发送或接收端口范围为7000-7009的udp协议数据包

如果不指定proto 修饰符, 则默认为与相应type匹配的修饰符.

    对于修饰符后跟id 的格式,可理解为, type id 是对包最基本的过滤条件: 即对包相关的主机, 网络, 端口的限制;dir 表示对包的传送方向的限制; proto表示对包相关的协议限制

    表达元之间还可以通过关键字and,or 以及 not 进行连接, 从而可组成比较复杂的条件表达式.

比如,`host foo and not port ftp and not port ftp-data'表示数据包的主机为foo,并且端口不是ftp(端口21) 和ftp-data(端口20, 常用端口和名字的对应可在linux 系统中的/etc/service 文件中找到)).

为了表示方便, 同样的修饰符可以被省略, 如'tcp dst port ftp or ftp-data or domain' 与以下的表达式含义相同'tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'.

借助括号以及相应操作符,可把表达元组合在一起使用(由于括号是shell的特殊字符, 所以在shell脚本或终端中使用时必须对括号进行转义, 即'(' 与')'需要分别表达成'\(' 与 '\)').

有效的操作符有:

否定操作 (`!' 或 `not')
 与操作(`&&'或 `and')
 或操作(`||' 或 `or')

否定操作符的优先级别最高. 与操作和或操作优先级别相同, 并且二者的结合顺序是从左到右. 要注意的是, 表达'与操作'时,需要显式写出'and'操作符, 而不只是把前后表达元并列放置.

1.1.3    实用命令实例

1.1.3.1        默认启动

tcpdump

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

1.1.3.2        监视指定网络接口的数据包

tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 

1.1.3.3        监视指定主机的数据包

打印所有进入或离开sundown的数据包.

tcpdump host sundown

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

tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

tcpdump ip host ace and not helios

如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截获主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

1.1.3.4        监视指定主机和端口的数据包

如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令

tcpdump tcp port 23 host 210.27.48.1

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

tcpdump udp port 123

1.1.3.5        监视指定网络的数据包

打印本地主机与Berkeley网络上的主机之间的所有通信数据包(nt:ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包)

tcpdump net ucb-ether

打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)

tcpdump 'gateway snup and (port ftp or ftp-data)'

打印所有源地址或目标地址是本地主机的IP数据包

(如果本地网络通过网关连到了另一网络, 则另一网络并不能算作本地网络.(nt: 此句翻译曲折,需补充).localnet 实际使用时要真正替换成本地网络的名字)

tcpdump ip and not net localnet

1.2  Wireshark使用说明

1.2.1    Wireshark简介

Wireshark 是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包, 并尝试显示包的尽可能详细的情况


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值