一、参考
TCP/IP详解 卷1:协议(英文版)A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic
二、名词解释
BSD: Berkeley Software Distribution, 伯克利软件套件
BPF: BSD Packet Filter, BSD包过滤
SLIP: serial line IP 串行线IP
pcap: packet capture 数据报捕获
三、内容
1. 概要
tcpdump 程序是由Van Jacobson, Craig Leres, Steven McCanne编写的,
他们都来自于加州大学伯克利分校劳伦斯伯克利实验室
毫无疑问,tcpdump是首要的网络分析工具,因为它在一个接口中提供了强大和简洁的功能
tcpdump运行通过将网卡设置为混杂模式,这样可以捕获到每一个经过线路的数据报;正常情况下,网卡只会捕获链路层数据帧(发送到特定接口或者广播地址)
底层操作系统必须允许网络接口可以被设置为混杂状态,让一个用户进程捕获数据帧
2.BSD 包过滤
BSD内核中包含包过滤器,tcpdump使用该包过滤器,过滤经过网络接口(已经设置为混杂模式)的数据报,BPF在点到点链路(例如:SLIP)中,也可以运行,BPF不需要特殊的东西来捕获通过接口的所有数据报,并且使用环回接口
BPF运行机制:
(1)BPF经以太网设备驱动程序设置为混杂模式,然后从驱动器中接收每一个接收到的分组和每个发送出的分组的副本
(2)数据报通过用户指定的过滤器,过滤
(3)只用用户进行认为有作用的数据报才会传递到用户进程中
对于同一个网络接口,可以指定多个进程,每个进程指定各自过滤器(过滤器可以通过命令行指定)
除了指定一个过滤器,BPF的用户进程还可以指定一个超时时间值,由于
(1)通过网络接口的数据很容易达到CPU处理瓶颈
(2)用户进程频繁从内核中读取小的数据帧,代价很高
BPF尝试将多个帧打包到一个读缓冲区中,并且仅在缓冲区已经写满或者用户指定的超时时间达到时候,返回
tcpdump将超时时间设置为1秒,因为通常1秒中BPF将接收到大量数据
用户进程指定的过滤器指定BPF,哪些数据帧是可用的过程,可以想象为一个机器的指令列表,
这些指令将由内核中的BPF过滤器解析,在内核中过滤(不是在用户进程中),减少了必须从内核传递给用户进程的数据量,tcpdump允许用户每次运行命令行时候,添加过滤器表达式,tcpdump程序将用户输入命令行转化为相应的BPF指令序列
高级过滤器,需要充分了解数据报结构
3. tcpdump输出
tcpdump默认输出是原生数据报数据,需要修改输出格式,更便于阅读
首先,tcpdump总是输出正在监听的网络接口的名称,将删除这一行
4. 安全机制
很显然,利用网络流量可以看到许多不应该看到的信息,例如:
Telnet和FTP等应用程序的用户键入的密码在用户输入密码时候,将通过网络进行传输(分为密码明文表示或者加密表示,加密表示通常保存在/etc/passwd或者/etc/shadow中)
将tcpdump作为一种学习工具,用于获取真正通过网络传输的数据报
5. 实例
下面将展示如何以各种方式隔离流量(IP,端口,协议,应用层),找到真正需要的数据报
5.1 网卡
-i 参数指定网络接口( network interface)名称,可以指定any标识所有的网络接口
-v 分析和打印时候,产生详细的输出
-vv 产生比-v 更加详细的输出
-vvv 产生比-vv更加详细的输出
-c 指定要抓取的包数量(count),指定的是最终获取的包数量(可能最终获取10个包,但是已经处理了100个包)
5.2 主机
通过host参数指定主机IP,过滤流量
通过src参数指定源主机IP,或者dst参数指定目的主机IP
5.3 端口
通过port参数指定具体端口,过滤流量
可以通过portrange 参数指定端口范围
5.4 协议
通过添加协议名称,过滤流量
可以通过ip6,只接收ip6的流量
5.5 大小
6. pcap文件
将数据报捕获后保存为文件,便于将来分析,是常用方式,这些捕获的数据报通常称为PCAP文件,
这些保存的pcap文件可以被数百种应用程序处理,包括网络分析器、入侵检测系统、tcpdump本身
通过 -w 参数,可以将捕获数据报写入指定文件中
通过 -r 参数,可以从指定文件中读取数据报
7. 高级功能
如下,一些其他参数
-s: 以字节为单位定义捕获的快照长度(大小)
-s0: 捕获所有的流量信息
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。