后台核心编程(十五):网络编程-网络分析工具


 

1 ping

ping ( Packet Internet Groper ,因特网包探索器)是Windows 、UNIX 和Linux 系统下的一个命令。ping 也属于一个通信协议,是TCP/IP 协议的一部分。利用ping 命令可以检查网络是否连通,可以很好地帮助分析和判定网络故障。应用格式: ping 空格IP 地址,该命令还可以加许多参数使用,如下图所示。

ping 发送一个ICMP (Internet Control Messages Protocol ,因特网信报控制协议),请求消息给目的地并报告是否收到所希望的ICMP echo ( ICMP 回声应答),它是用来检查网络是否通畅或者网络连接速度的命令。作为一个后台开发者, ping 是一个必须掌握的命令。它所利用的原理是这样的:利用网络上机器IP 地址的唯一性,给目标IP 地址发送一个数据包,再要求对方返问一个同样大小的数据包来确定两台网络机器是否连接相通以及时延是多少。

ping 指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping 命令来抢占你的网络资源,导致系统、网速变慢。严禁ping 入侵作为大多数防火墙的一个基本功能提供给用户进行选择。通常的情况下你如果不用作服务器或者进行网络测试,可以放心的选巾它,以保护你的计算机。

1.1 ping的使用

网络连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。使用ping 检查连通性有以下6 个步骤。

  1. 使用ipconfig/all 观察本地网络设置是否正确。
  2. ping 127.0.0.l ,来检查本地的TCP/IP 协议有没有设置好,如下图所示。
3. ping 本网网关或本网IP 地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。(在非局域网中这一步骤可以忽略) 4. ping 本地DNS 地址,这样做是为了检查本地DNS 服务器是否工作正常。 5. ping 远程IP 地址,这主要是检查本网或本机与外部的连接是否正常。ping 远程 IP 地址还可以用来测试网络延时。比如输入“ ping www.baidu.com ”(百度域名)之后屏幕会显示如下图所示的信息。

从上图可以看到,向百度域名发了7 个包,对方7 个都收到了,没有丢包,共耗时6113ms, RTT ( 一个连接的往返时间)的最小、平均、最大和算术平均差分别是15 .7 12ms 、15.744ms 、15.796ms 和 0.137 。

后面的time= l5.7ms 是响应时间,这个时间越小,说明连接的这个地址速度越快。

Linux 的ping 语法和Windows 的差不多,但是Li nux 的ping 数据包是64Byte ,而Windows 的是32Byte, Windows 下默认发送4 次数据包后结束, Linux 下的ping 程序默认不停发送数据包,直到用户手动停止(停止指令是Ctrl+c ) 。

2 tcpdump

2.1 tcpdump介绍

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

tcpdump 根据使用者的定义对网络上的数据包进行截获和分析。作为互联网上经典的系统管理员工具, tcpdump 以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络、排查问题等所必备的工具之一。

tcpdump 支持相当多的不同参数,如使用,i 参数指定tcpdump 监听的网络界面,这在计
算机具有多个网络界面时非常有用;使用-c 参数指定要监昕的数据包数量,使用-w 参数指定将监听到的数据包写人文件中保存,等等。

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

2.2 tcpdump使用

tcpdump 采用命令行方式,它的命令格式为:

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]

抓包选项:
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in""out""inout",默认为"inout"-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      :输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,
      :从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项:
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项:
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

所以常用的选项也就这几个:

  • tcpdump -D
  • tcpdump -c num -i int -nn -XX -vvv

2.3 tcpdump表达式

表达式用于筛选输出哪些类型的数据包,如果没有给定表达式,所有的数据包都将输出,否则只输出表达式为true的包。在表达式中出现的shell元字符建议使用单引号包围。

tcpdump的表达式由一个或多个"单元"组成,每个单元一般包含ID的修饰符和一个ID(数字或名称)。有三种修饰符:

(1)**.type:**指定ID的类型。
可以给定的值有host/net/port/portrange。例如"host foo",“net 128.3”,“port 20”,“portrange 6000-6008”。默认的type为host。

(2)**.dir:**指定ID的方向。
可以给定的值包括src/dst/src or dst/src and dst,默认为src or dst。例如,"src foo"表示源主机为foo的数据包,"dst net 128.3"表示目标网络为128.3的数据包,"src or dst port 22"表示源或目的端口为22的数据包。

(3).proto:通过给定协议限定匹配的数据包类型。
常用的协议有tcp/udp/arp/ip/ether/icmp等,若未给定协议类型,则匹配所有可能的类型。例如"tcp port 21",“udp portrange 7000-7009”。

所以,一个基本的表达式单元格式为"proto dir type ID"

除了使用修饰符和ID组成的表达式单元,还有关键字表达式单元:gateway,broadcast,less,greater以及算术表达式。

2.4 tcpdump示例

注意,tcpdump只能抓取流经本机的数据包。

  1. 默认启动
$ tcpdump

默认情况下,直接启动tcpdump将监视第一个网络接口(非lo口)上所有流通的数据包。这样抓取的结果会非常多,滚动非常快。

  1. 监视指定网络接口的数据包
tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,如eth0。

  1. 监视指定主机的数据包,例如所有进入或离开longshuai的数据包
tcpdump host longshuai
  1. 打印ace与任何其他主机之间通信的IP数据包,但不包括与helios之间的数据包
tcpdump ip host ace and not helios
  1. 监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包
tcpdump -c 10 net 192.168

3 netstat

netstat 命令用于显示与IP 、TCP、UDP 和ICMP 协议相关的统计数据, 一般用于检验本机各端口的网络连接情况netstat 是在内核中访问网络及相关信息的程序,它能提供TCP 连接、对TCP 和UDP 的监听及获取进程内存管理的相关报告。

计算机有时候会因接收到的数据报导致出错数据或故障, TCP/IP 可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP 数据报相当大的百分比,或者它的数目正迅速增加,那么就应该使用netstat 查一查为什么会出现这些情况了。

执行netstat可以看到:

从整体上看, netstat 的输出结果可以分为两个部分: ① Active Internet connections,称为有源TCP 连接,其中Recv-Q 和Send-Q 指的是接收队列和发送队列,这些数字一般都应该是0 ,如果不是则表示请求包和回包正在队列中堆积; ② Active UNIX domain sockets,称为有源UNIX 域套接口(和网络套接字一样但是只能用于本机通信,性能可以提高一倍)。

Proto 显示连接使用的协议, RefCnt 表示连接到本套接口上的进程号, Types 显示套接口的类型, State 显示套接口当前的状态, Path 表示连接到套接口的其他进程使用的路径名。

常见参数如下:

-a: (all)显示所有选项,默认不显示LISTEN 相关
-t: (tcp)仅显示tcp 相关选项
-u: (udp)仅显示udp 相关选项
-n: 拒绝显示别名,能显示数字的全部转化成数字。
-l: 仅列出有在Listen (监听)的服务状态
-p: 显示建立相关链接的程序名
-r: 显示路由信息,路由表
-e: 显示扩展信息, 例如uid 等
-s: 按各个协议进行统计
-c: 每隔一个固定时间,执行该net stat 命令。
提示: LISTEN 和 LISTEN工NG 的状态只有用- a 或者- 1 才能看到

各参数的使用实例如下所述。
(1)列出所有端口(包括监昕和未监昕的) : nets tat -a 。
(2)列出所有TCP 端口: netstat -at 。
(3)列出所有UDP 端口: netstat -au 。
(4)列出所有处于监听状态的socket: netstat -l 。
(5)列出所有监听 TCP 端口的socket: netstat -It 。
(6)列出所有监听 UDP 端口的socket: netstat -lu 。
(7)列出所有监听 UNIX 端口的socket : netstat -lx 。
(8)在netstat 输出中显示 PID 和进程名称: netstat -p 。
(9)当你不想让主机,端口和用户名显示,使用 netstat -n ,将会使用数字代替那些名称。
(10)持续输出 netsta 信息: netstat -c 。
(11)找出程序运行的端口: netstat -ap I grep ssh 。
(12)找出运行在指定端口的进程,如netstat -an I grep ’:80’ 。
(13)显式网络接口列表: netstat -i 。
(14) IP 和 TCP 的分析,如查看链接某服务端口最多的IP 地址命令是:
netstat -nat I grep ” 192.168.1.15:22” l awk ’{print $5 }’ l awk -F :’{p rint $1 }’ l sort l uniq -c l sort -nr l head -20 。
(15) TCP 各自状态列表: netstat -nat l awk ’{ print $6 }’。
(16)先把各种TCP 状态全都取出来,然后使用un坷,c 统计, 之后再进行排序:
netstat -nat l awk ’{print $6 } ’ l sort l uniq -c

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值