linux-shell-网络分析工具
tcpdump
使用tcpdump分析网络报文
捕获及停止条件
• -D 列举所有网卡设备
• -i 选择网卡设备
• -c 抓取多少条报文
• –time-stamp-precision 指定捕获时的时间精度,默认毫秒 micro,可选纳秒 nano
• -s 指定每条报文的最大字节数,默认 262144 字节
BPF:Expression 表达式
• primitives 原语:由名称或数字,以及描述它的多个限定词组成
• qualifiers 限定词
• Type:设置数字或者名称所指示类型,例如 host www.baidu.com
• Dir:设置网络出入方向,例如 dst port 80 • Proto:指定协议类型,例如 udp
• 其他
原语运算符
• 与:&& 或者 and
• 或: | 或者 or |
• 非:! 或者 not
例如:src or dst portrange 6000-8000 && tcp or ip6
限定词
Type:设置数字或者名称所指示类型
• host、port
• net ,设定子网,net 192.168.0.0 mask 255.255.255.0 等价于 net 192.168.0.0/24 • portrange,设置端口范围,例如 portrange 6000-8000
Dir:设置网络出入方向
• src、dst、src or dst、src and dst
• ra、ta、addr1、addr2、addr3、addr4(仅对 IEEE 802.11 Wireless LAN 有效)
Proto:指定协议类型
• ether、fddi、tr、 wlan、 ip、 ip6、 arp、 rarp、 decnet、 tcp、udp、icmp、igmp、icmp、 igrp、pim、ah、esp、vrrp
其他 • gateway:指明网关 IP 地址,等价于 ether host ehost and not host host
• broadcast:广播报文,例如 ether broadcast 或者 ip broadcast
• multicast:多播报文,例如 ip multicast 或者 ip6 multicast
• less, greater:小于或者大于
基于协议域过滤
• 捕获所有 TCP 中的 RST 报文 • tcp[13]&4==4
• 抓取 HTTP GET 报文
• port 80 and tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x47455420
• 注意:47455420 是 ASCII 码的 16 进制,表示”GET ”
• TCP 报头可能不只 20 字节,data offset 提示了承载数据的偏移,但它以 4 字节为单位
文件操作
• -w 输出结果至文件(可被Wireshark读取分析)
• -C 限制输入文件的大小,超出后以后缀加 1 等数字的形式递增。 注意单位是 1,000,000 字节
• -W 指定输出文件的最大数量,到达后会重新覆写第 1 个文件
• -G 指定每隔N秒就重新输出至新文件,注意-w 参数应基于
strftime 参数指定文件名
• -r 读取一个抓包文件
• -V 将待读取的多个文件名写入一个文件中,通过读取该文件同时 读取多个文件
输出时间戳格式
• -t 不显示时间戳
• -tt自1970年1月1日0点至今的秒数 • -ttt 显示邻近两行报文间经过的秒数
• -tttt 带日期的完整时间
• -ttttt 自第一个抓取的报文起经历的秒数
分析信息详情
• -e 显示数据链路层头部
• -q 不显示传输层信息
• -v 显示网络层头部更多的信息,如 TTL、id 等
• -n 显示 IP 地址、数字端口代替 hostname 等
• -S TCP 信息以绝对序列号替代相对序列号
• -A 以 ASCII 方式显示报文内容,适用 HTTP 分析
• -x 以 16 进制方式显示报文内容,不显示数据链路层
• -xx 以 16 进制方式显示报文内容,显示数据链路层
• -X 同时以 16 进制及 ACII 方式显示报文内容,不显示数据链路层 • -XX 同时以 16 进制及 ACII 方式显示报文内容,显示数据链路层
示例
# -i eth0 只抓取eth0网卡,-n不解析协议名和主机名
# tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
$ tcpdump -i eth0 -n tcp port 80
ifconfig
功能
- ifconfig(interfaces config)
查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置。
通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。
命令参数:
-
-up 启动指定网络设备/网卡。
-
-down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。
-
-arp 设置指定网卡是否支持ARP协议。
ifconfig eth0 arp 开启网卡eth0 的arp协议
ifconfig eth0 -arp 关闭网卡eth0 的arp协议
-
-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-
-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-
-a 显示全部接口信息
-
-s 显示摘要信息(类似于 netstat -i)
-
-add 给指定网卡配置IPv6地址
为网卡配置和删除IPv6地址:
ifconfig eth0 add 33ffe:3240:800:1005::2/64
ifconfig eth0 del 33ffe:3240:800:1005::2/64
-
-address 为网卡设置IPv4地址
-
-del 删除指定网卡的IPv6地址