TCP dump使用

  抓包工具在分析通信网络传输故障时发挥着重要作用,不仅可以用wireshark 进行抓包,也可以用Linuxtcpdump做抓包。

下面是tcpdump的基本使用方法:

 

基本语法


过滤主机
- 抓取所有经过 eth1,目的或源地址是192.168.1.1 的网络数据
# tcpdump -i eth1 host 192.168.1.1
- 源地址
# tcpdump -i eth1 src host 192.168.1.1
- 目的地址
# tcpdump -i eth1 dst host 192.168.1.1


过滤端口
- 抓取所有经过 eth1,目的或源端口是25 的网络数据
# tcpdump -i eth1 port 25
- 源端口
# tcpdump -i eth1 src port 25
- 目的端口
# tcpdump -i eth1 dst port 25网络过滤
--------
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168

协议过滤
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp

2常用表达式

: ! or "not" ( 去掉双引号 )
: && or "and"
: || or "or"


抓取所有经过 eth1,目的地址是192.168.1.254 192.168.1.200 端口是80 TCP 数据
# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host
192.168.1.200)))'


抓取所有经过 eth1,目标 MAC 地址是00:01:02:03:04:05 ICMP 数据
# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'


抓取所有经过 eth1,目的网络是192.168,但目的主机不是192.168.1.200 TCP 数据

# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

 

只抓 SYN
# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'


SYN, ACK:
# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

SMTP 数据
# tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'
抓取数据区开始为"MAIL"的包,"MAIL"的十六进制为0x4d41494c

HTTP GET 数据
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'
"GET "的十六进制是 47455420

SSH 返回
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'
"SSH-"的十六进制是 0x5353482D


# tcpdump -i eth1 '(tcp[(tcp[12]>>2):4] = 0x5353482D) and (tcp[((tcp[12]>>2)+4):2]
= 0x312E)'抓老版本的 SSH返回信息,如"SSH-1.99.."

 

DNS 请求数据
# tcpdump -i eth1 udp dst port 53

其他
-c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C还是
抓的太多,于是可以用-c 参数指定抓多少个包。
# time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null
上面的命令计算抓 10000 SYN 包花费多少时间,可以判断访问量大概是多少。

 

实时抓取端口号8000GET包,然后写入GET.log

tcpdump -i eth0 '((port 8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log

 

3tcpdump选项介绍

tcpdump抓包并保存成cap文件

首选介绍一下tcpdump的常用参数

tcpdump采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名] [表达式]

 

-a将网络地址和广播地址转变成名字;

-b在数据-链路层上选择协议,包括iparprarpipx都是这一层的。tcpdump -b arp 将只显示网络中的arp即地址转换协议信息;

-c在收到指定数目的包后,tcpdump就会停止;

-d将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd将匹配信息包的代码以c语言程序段的格式给出;

-ddd将匹配信息包的代码以十进制的形式给出;

-e在输出行打印出数据链路层的头部信息;

-f将外部的Internet地址以数字的形式打印出来;

-F从指定的文件中读取表达式,忽略其它的表达式;

-i指定监听的网络接口;

-l使标准输出变为缓冲行形式,tcpdump -l >tcpcap.txt将得到的数据存入tcpcap.txt文件中;

-n不进行IP地址到主机名的转换;

-N不打印出默认的域名

-nn不进行端口名称的转换;

-O不进行匹配代码的优化,当怀疑某些bug是由优化代码引起的,此选项将很有用;

-r从指定的文件中读取包(这些包一般通过-w选项产生)

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

-t在输出的每一行不打印UNIX时间戳,也就是不显示时间;

-T将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)snmp

-tt打印原始的、未格式化过的时间;

-v输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

-vv输出详细的报文信息;

-w直接将包写入文件中,并不分析和打印出来;

tcpdump默认的是标准输出,一般来讲就是显示器,如果要将抓包结果保存到文件则需要使用-w参数,例如:

 tcpdump -i eth1 -w /tmp/xxx.cap

eth1的包


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值