tcpdump抓包工具以及netstat命令功能总结

tcpdump是一款经典的抓包工具,下面是选项总结

- n
使用IP地址表示目标主机,而不是主机名;使用数字表示端口号,而不是服务名称
- i
指定要监听的网卡接口。“ -i any”表示抓取所有网卡接口上的数据包
- v
输出一个稍微详细的信息,例如,显示IP数据包中的TTL和TOS信息
- t
不打印时间戳
- e
显示以太网帧头部信息
- c
仅抓取指定数量的的数据包
- x
以十六进制数显示数据包的内容,但不显示包中以太网帧的头部信息
- X
与-x类似,不过还打印每个十六进制字节对应的ASCII字符
- XX
与-X相同,不过还打印以太网帧的头部信息
- s
设置装包时的抓取长度,超过指定长度时,抓取到的将是被截断的数据包。4.0以后的版本默认的抓包长度是65535字节,因此基本不用担心抓包的长度了
- S
以绝对值来显示TCP报文段的序号,而不是相对值
- w
将tcpdump的输出以特殊的格式定向到某个文件中
- r
从文件读取数据包信息并显示之
除了使用选项之外,tcpdump还支持用表达式来进一步过滤数据包。表达式操作数分为三种:类型(type),方向(dir),和协议(protocol)

类型:解释其后面紧跟着的参数的含义。tcpdump支持的类型包括
  • host(主机名,或IP地址)
  • net(用CIDR方法表示的网络地址)
  • port(端口号)
  • portrange(端口范围),
比如要抓取整个1.2.3.0/24网络上的数据包,可以使用如下的命令:                
tcpdump  net 1.2.3.0/24



方向:src指定数据包的发送端,dst指定数据包的目的端。比如要抓取进入端口9090的数据包,可以使用如下的命令
tcpdump dst port 9090

协议:指定目标协议。比如要抓取所有ICMP数据包,可以使用如下命令
tcpdump icmp


我们还可以使用逻辑操作符来组织上述操作数以及更复杂的表达式:
  • and(或者&&)
  • or(或者||)
  • not(或者!)

如果表达式比较复杂,还可以用括号给它们分组。不过在使用括号的时候,我们需要用单引号 '  扩住这部分内容或者使用反斜杠 \ 来对它进行转义,以避免它被shell所解释。比如要抓取来自主机10.0.2.4,目标端口是3389或22的数据包,可以使用如下命令:
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

此外,tcpdump还允许直接使用数据包中的部分协议字段的内容来过滤数据包。比如,仅抓取TCP同步报文段,可使用如下命令:
tcpdump 'tcp[13] & 2 != 0'
这是因为tcp头部的第14个字节的第2个位正是同步标志。该命令也可以表示为
tcpdump 'tcp[tcpflags] & tcp-syn != 0'


tcpdump输出的格式不仅与选项有关,还与协议有关,不同协议的输出格式不同。


关于 netstat命令(查看网络状态)

-n
使用IP地址表示目标主机,而不是主机名;使用数字表示端口号,而不是服务名称
-a
显示结果中也包含监听socket
-t
仅显示tcp连接
-r
显示路由信息
-i
显示网卡接口的数据流量
-c
每隔一秒输出一次
-o
显示socket定时器(比如保活定时器)的信息
-p
显示socket所属的进程的pid和名字

pidof + 进程名 可以方便地查看进程的pid,在查看服务器id时非常方便



你可能感兴趣的:(网络)