浅谈Linux之抓包命令tcpdump
前言
Tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助去掉无用的信息。TcpDump的总的输出格式为:系统时间,来源主机+端口,目标主机+端口,数据包参数。
如何躲过Tcpdump的监听、分析?一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP 堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。
tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ -P in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
Tcpdump基本指令:
tcpdump
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
二、操作
ifconfig
查看本机网卡
上图中的网卡可为eth0/lo
tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。
tcpdump host 210.27.48.1
截获所有210.27.48.1的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname
tcpdump tcp port 端口 and host 主机ip
tcpdump -c 接收指定数量
tcpdump host/net/port src/dst/src or dst/dst and src
主机/网络地址/端口.若无指定,则为host
指明源地址/指明网络地址
tcpdump -i eth1 src port 443
简单实例
172.24.18.25 ping 172.24.18.8
在172.24.18.8中抓包172.24.18.25
IP iZ88BFRKH96Z为18.8的hostname名,可见抓包成功