Tcpdump怎么用

59次阅读
没有评论

共计 8514 个字符,预计需要花费 22 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 Tcpdump 怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. TCPDump 介绍  

  TcpDump 可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。tcpdump 就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和 *** 者都是非常有用的工具。tcpdump 存在于基本的 FreeBSD 系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

  我们用尽量简单的话来定义 tcpdump,就是:dump the traffice on anetwork.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump 以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump 提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和 *** 者都是非常有用的工具。tcpdump 存在于基本的 FreeBSD 系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。 

2. TcpDump 的使用
  普通情况下,直接启动 tcpdump 将监视第一个网络界面上所有流过的数据包。
# tcpdump 
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 1:80:c2:0:0:0 802.1d ui/C len=43
  0000 0000 0080 0000 1007 cf08 0900 0000
  0e80 0000 902b 4695 0980 8701 0014 0002
  000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 Broadcast sap e0 ui/C len=97
  ffff 0060 0004 ffff ffff ffff ffff ffff
  0452 ffff ffff 0000 e85b 6d85 4008 0002
  0640 4d41 5354 4552 5f57 4542 0000 0000
  0000 00
 tcpdump 支持相当多的不同参数,如使用 - i 参数指定 tcpdump 监听的网络界面,这在计算机具有多个网络界面时非常有用,使用 - c 参数指定要监听的数据包数量,使用 - w 参数指定将监听到的数据包写入文件中保存,等等。

  然而更复杂的 tcpdump 参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump 使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用 man tcpdump 查看这些过滤规则的具体用法。

  显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的 bpfilter 伪设备。一般情况下网络硬件和 TCP/IP 堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的 TCP/IP 堆栈才行。在 FreeBSD 下,这就需要内核支持伪设备 bpfilter。因此,在内核中取消 bpfilter 支持,就能屏蔽 tcpdump 之类的网络分析工具。

  并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作 *** 同网络的其他计算机的跳板。

  May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

  虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持 tcp、udp 等低层协议。

  从上面 tcpdump 的输出可以看出,tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带 - w 参数的 tcpdump  截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。FreeBSD 提供的一个有效的解码程序为 tcpshow,它可以通过 Packages Collection 来安装。

# pkg_add /cdrom/packages/security/tcpshow*
# tcpdump -c 3 -w tcpdump.out
tcpdump: listening on fxp0
# tcpshow  tcpdump.out
—————————————————————————
Packet 1
TIME:12:00:59.984829
LINK:00:10:7B:08:3A:56 – 01:80:C2:00:00:00 type=0026
*** No decode support for encapsulated protocol ***
—————————————————————————
Packet 2
TIME:12:01:01.074513 (1.089684)
LINK:00:A0:C9:AB:3C:DF – FF:FF:FF:FF:FF:FF type=ARP
ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request
sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3
target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3
—————————————————————————
Packet 3
TIME:12:01:01.985023 (0.910510)
LINK:00:10:7B:08:3A:56 – 01:80:C2:00:00:00 type=0026
*** No decode support for encapsulated protocol ***

  tcpshow 能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例子中可以看出,tcpshow 支持的协议也并不丰富,对于它不支持的协议就无法进行解码。

  除了 tcpdump 之外,FreeBSD 的 PackagesCollecion 中还提供了 Ethereal 和 Sniffit 两个网络分析工具,以及其他一些基于网络分析方式的安全工具。其中 Ethereal 运行在 X Window 下,具有不错的图形界面,Sniffit 使用字符窗口形式,同样也易于操作。然而由于 tcpdump 对过滤规则的支持能力更强大,因此系统管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。因此网络分析工具是用于网络管理的宝贵系统工具。为了防止数据被滥用的网络分析工具截获,关键还是要在网络的物理结构上解决。常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时的数据安全问题。如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使用 FreeBSD 系统执行网桥任务。这需要使用 option BRIDGE 编译选项重新定制内核,此后使用 bridge 命令启动网桥功能。

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

(1). tcpdump 的选项介绍  

  -a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以 c 语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的 Internet 地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在 ip 包中可以包括 ttl 和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump 就会停止;
-F 从指定的文件中读取表达式, 忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过 - w 选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有 rpc(远程过程调用)和 snmp(简单网络管理协议;)

(2). tcpdump 的表达式介绍

http://anheng.com.cn/news/24/586.html

  表达式是一个正则表达式,tcpdump 利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。

  第一种是关于类型的关键字,主要包括 host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2 是一台主机,net 202.0.0.0 指明 202.0.0.0 是一个网络地址,port 23 指明端口号是 23。如果没有指定类型,缺省的类型是 host.

http://anheng.com.cn/news/24/586.html

  第二种是确定传输方向的关键字,主要包括 src , dst ,dst or src, dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 , 指明 ip 包中源地址是 210.27.48.2 , dst net202.0.0.0 指明目的网络地址是 202.0.0.0。如果没有指明方向关键字,则缺省是 src or dst 关键字。

http://anheng.com.cn/news/24/586.html

  第三种是协议的关键字,主要包括 fddi,ip,arp,rarp,tcp,udp 等类型。Fddi 指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是 ether 的别名,fddi 和 ether 具有类似的源地址和目的地址,所以可以将 fddi 协议包当作 ether 的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则 tcpdump 将会监听所有协议的信息包。

  除了这三种类型的关键字之外,其他重要的关键字如下:gateway,broadcast,less,greater, 还有三种逻辑运算,取非运算是 not ! , 与运算是 and , 或运算 是 or , ││;这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

  A 想要截获所有 210.27.48.1 的主机收到的和发出的所有的数据包:

#tcpdump host 210.27.48.1

B 想要截获主机 210.27.48.1 和主机 210.27.48.2 或 210.27.48.3 的通信,使用命令:(在命令行中使用括号时,一定要添加 \)

#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

C 如果想要获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的 ip 包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

D 如果想要获取主机 210.27.48.1 接收或发出的 telnet 包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

E 对本机的 udp 123 端口进行监视 123 为 ntp 的服务端口

# tcpdump udp port 123

F 系统将只对名为 hostname 的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机 hostname 发送的所有数据:

#tcpdump -i eth0 src host hostname

G 下面的命令可以监视所有送到主机 hostname 的数据包:

#tcpdump -i eth0 dst host hostname

H 我们还可以监视通过指定网关的数据包:

#tcpdump -i eth0 gateway Gatewayname

I 如果你还想监视编址到指定端口的 TCP 或 UDP 数据包,那么执行以下命令:

#tcpdump -i eth0 host hostname and port 80

J 如果想要获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的 ip 包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

K 想要截获主机 210.27.48.1 和主机 210.27.48.2 或 210.27.48.3 的通信,使用命令:

#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

L 如果想要获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的 ip 包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

M 如果想要获取主机 210.27.48.1 接收或发出的 telnet 包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

(3). tcpdump 的输出结果介绍

http://anheng.com.cn/news/24/586.html

  下面我们介绍几种典型的 tcpdump 命令的输出信息

A, 数据链路层头信息
使用命令: #tcpdump –e host ice
  ice 是一台装有 linux 的主机,她的 MAC 地址是 0:90:27:58:AF:1A
  H219 是一台装有 SOLARIC 的 SUN 工作站,它的 MAC 地址是 8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h319.33357 ice.telne
t 0:0(0) ack 22535 win 8760 (DF)

  分析:21:50:12 是显示的时间,847509 是 ID 号,eth0 表示从网络接口 eth0 接受该数据包,eth0 表示从网络接口设备发送数据包, 8:0:20:79:5b:46 是主机 H219 的 MAC 地址, 它表明是从源地址 H219 发来的数据包.0:90:27:58:af:1a 是主机 ICE 的 MAC 地址, 表示该数据包的目的地址是 ICE . ip 是表明该数据包是 IP 数据包,60 是数据包的长度, h319.33357 ice.telnet 表明该数据包是从主机 H219 的 33357 端口发往主机 ICE 的 TELNET(23)端口. ack 22535 表明对序列号是 222535 的包进行响应. win 8760 表明发送窗口的大小是 8760.

B,ARP 包的 TCPDUMP 输出信息

使用命令:#tcpdump arp

得到的输出结果是:
22:32:42.802509 eth0 arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42 是时间戳, 802509 是 ID 号, eth0 表明从主机发出该数据包, arp 表明是 ARP 请求包,who-has route tell ice 表明是主机 ICE 请求主机 ROUTE 的 MAC 地址。0:90:27:58:af:1a 是主机 ICE 的 MAC 地址。

C,TCP 包的输出信息

用 TCPDUMP 捕获的 TCP 包的一般输出信息是:

src dst: flags data-seqno ack window urgent options
src dst: 表明从源地址到目的地址, flags 是 TCP 包中的标志信息,S 是 SYN 标志, F (FIN), P (PUSH) , R(RST) . (没有标记); data-seqno 是数据包中的数据的顺序号, ack 是下次期望的顺序号,window 是接收缓存的窗口大小, urgent 表明数据包中是否有紧急指针. Options 是选项.

D,UDP 包的输出信息

  用 TCPDUMP 捕获的 UDP 包的一般输出信息是:

route.port1 ice.port2: udp lenth
UDP 十分简单,上面的输出行表明从主机 ROUTE 的 port1 端口发出的一个 UDP 数据包到主机 ICE 的 port2 端口,类型是 UDP,包的长度是 lenth

3. 辅助工具

(1) 想查看 TCP 或者 UDP 端口使用情况,使用 netstat -anp
  如果有些进程看不见,如只显示”-”,可以尝试
sudo netstat -anp
  如果想看某个端口的信息,使用 lsof 命令,如:
sudo lsof -i :631

-bash-3.00# netstat -tln

  netstat -tln 命令是用来查看 linux 的端口使用情况

/etc/init.d/vsftp start 是用来启动 ftp 端口~!

  看文件 /etc/services

netstat

  查看已经连接的服务端口(ESTABLISHED)

netstat -a

  查看所有的服务端口(LISTEN,ESTABLISHED)

sudo netstat -ap

  查看所有 的服务端口并显示对应的服务程序名

nmap <扫描类型><扫描参数>

例如:

nmap localhost

nmap -p 1024-65535 localhost

nmap -PT 192.168.1.127-245

  当我们使用 netstat -apn 查看网络连接的时候,会发现很多类似下面的内容:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 52 218.104.81.152:7710 211.100.39.250:29488 ESTABLISHED 6111/1

  显示这台服务器开放了 7710 端口,那么 这个端口属于哪个程序呢?我们可以使用 lsof -i:7710 命令来查询:

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

sshd 1990 root 3u IPv4 4836 TCP *:7710(LISTEN)

  这样,我们就知道了 7710 端口是属于 sshd 程序的。

(2) 运行 tcpdump 命令出现错误信息排除

tcpdump: no suitable device found
tcpdump: no devices found /dev/bpf4: A file or directory in the path name does not exist. 
解决方案 2 种原因:
1. 权限不够,一般不经过处理,只用 root 用户能使用 tcpdump
2. 缺省只能同时使用 4 个 tcpdump,如用完,则报此类错。需要停掉多余的 tcpdump

以上是“Tcpdump 怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计8514字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)