Linux 常用网络工具
网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool 用于查看 linux 服务器 ip 地址,管理服务器网络配置,通过 telnet 和 ethernet 建立与 linux 之间的网络链接,查看 linux 的服务器信息等。下面让我们看看在 Linux 下的网络和监控命令的使用。
一、ping
ping 将数据包发向用户指定地址。当包被接收,目标机器发送返回数据包。
主要有两个作用:
- 用来确认网络连接是畅通的。
- 用来查看连接的速度信息。
如果 ping www.baidu.com 它将返回它的 ip 地址 。你可以通过 ctrl+C 来停止命令。
补充:-c 参数可以定义 ping 的次数,脚本中的网络判断用得比较多,比如 ping -c 4 www.baidu.com就是 ping 百度四次;而在 windows 下,则使用-n 参数来定义 ping 次数,如 ping -n 4 www.baidu.com
二、ifconfig
查看用户网络配置。它显示当前网络设备配置。对于需要接收或者发送数据错误查找,这个工具极为好用。
ifconfig 列出当前节点的所有网络设备
列出指定的网卡信息
Ps 在Windows下 用的 ipconfig
三、telnet
通过 telnet 协议连接目标主机,如果 telnet 连接可以在任一端口上完成即代表着两台主机间的连接良好。
1 | telnet hostname port – 使用指定的端口 telnet 主机名。这通常用来测试主机是否在线或者网络是否正常。 |
Ps 此命令在 Windows 下同样适用。
四、ethtool
ethtool 允许你查看和更改网卡的许多设置(不包括 Wi-Fi 网卡)。你可以管理许多高级设置,包括 tx/rx、校验及网络唤醒功能。
1 | ethtool -i <网卡设备> # 显示一个特定网卡的驱动信息,检查软件兼容性时尤其有用 |
五、nslookup
查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。
主要是下面的几个用法:
1、直接查询域名情况
1 | 格式:nslookup domain [dns-server] # 如果没有指定dns服务器,就采用系统默认的dns服务器。 |
2、查询其他记录类型
1 | 格式:nslookup -qt = type domain [dns-server] |
六、route
1、概述
route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
在Linux系统中, 设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中, 局域网中有一个网关, 能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由。
要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;要想永久保存,可以保存到配置文件。
linux 默认只支持一条默认路由,当重新启动网口时,会把其他默认路由去掉,只剩下一条该网口生成的默认路由。当然可以通过 route 命令手动添加多条默认路由,如果多条路由一样,则选择最开始找到的路由(排在前面的路由)。
2、route命令详解
2.1 命令格式
1 | route [-CFvnee] |
2.2 常用选项参数
选项
参数 | 说明 |
---|---|
-C | 显示路由缓存 |
-F | 显示发送信息 |
-v | 显示详细的处理信息 |
-n | 不解析名字 |
-ee | 使用更详细的资讯来显示 |
-V | 显示版本信息 |
-net | 到一个网络的路由表 |
-host | 到一个主机的路由表 |
参数
参数 | 说明 |
---|---|
add | 增加路由记录 |
del | 删除路由记录 |
target | 目的网络或目的主机 |
gw | 设置默认网关。gateway 的简写,后续接的是 IP 的数值 |
mss | 设置TCP的最大区块长度(MSS),单位MB |
window | 指定通过路由表的TCP连接的TCP窗口大小 |
de | 如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等 |
reject | 设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达 |
2.3 常用命令格式
添加和删除路由
1 | route {add | del } [-net|-host] [网域或主机] netmask [mask] [gw|dev] |
查询路由信息
1 | route -nee |
添加/删除默认网关路由
1 | route {add | del } default gw {IP-ADDRESS} {INTERFACE-NAME} |
添加/删除到指定网络的路由规则
1 | route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} dev {INTERFACE-NAME}(a) NETWORK-ADDRESS:用于指定网络地址。(b) NETMASK:用于指定子网掩码。(c) INTERFACE-NAME:用于指定接口名称,如eth0。例1:route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0例2:route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0 |
添加/删除路由到指定网络为不可达
1 | ## 设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。 |
2.4 输出详解
1 | [root@host01 ~]# route -n |
字段 | 说明 |
---|---|
Destination | 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关 |
Gateway | 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关。如果没有就显示星号(*) |
Genmask | Destination字段的网络掩码, Destination 是主机时需要设为 255.255.255.255, 是默认路由时会设置为 0.0.0.0 |
Flags | 标记:【U 该路由可以使用】,【R 恢复动态路由产生的表项】,【D 该路由是由改变路由(redirect)报文创建的】,【M 该路由已被改变路由报文修改】,【**!** 这个路由将不会被接受】,【G 该路由是到一个网关 (路由器)。如果没有设置该标志,说明目的地 是直接相连的】 |
Metric | 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 |
Ref | 路由项引用次数 |
Use | 此路由项被路由软件查找的次数 |
Iface | 网卡名字,例如 ens32 |
3、实例分析
3.1 路由选择分析
当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。评估过程如下:
(1) TCP/IP使用需要通信的目的IP地址和路由表中每一个路由项的网络掩码进行相与计算,如果相与后的结果匹配对应路由项的网络地址,则记录下此路由项。
(2) 当计算完路由表中所有的路由项后:
- TCP/IP选择记录下的路由项中的最长匹配路由(网络掩码中具有最多 “1” 位的路由项)来和此目的IP地址进行通信。
- 如果存在多个最长匹配路由,那么选择具有最低跃点数的路由项。
- 如果存在多个具有最低跃点数的最长匹配路由,那么:均根据最长匹配路由所对应的网络接口在网络连接的高级设置中的绑定优先级来决定(一般有线(eth0) > 无线 (wlan0) > 移动信号(4G))。
- 如果优先级一致,则选择最开始找到的最长匹配路由。(排在前面的路由)
3.2 验证分析
(1) 验证:traceroute www.baidu.com
通过路由表可以知道这个数据包到底是在那个路由网关出去的,我这里显示的是1.1这个路由网关出去的
1 | [root@host01 ~]# traceroute www.baidu.com |
(2) 删除1.1这个路由网关,验证这个数据包还能否出去
重新添加路由后,我们通过路由表可以知道有两条相同默认路由可以选择,由于先找到192.168.1.1 网关路由,所以最后选择了 192.168.1.1 网关。
1 | [root@host01 ~]# route -n |
3.3 添加和删除路由
1 | [root@host01 ~]# route -n |
3.4 默认路由网关
增加默认路由的方法!而且网关只要有一个就够了!
注意:添加网关的前提是你必须有这个网段,如果没有,时添加不了的!示例如下:
1 | # 因为我没有3.0网段,所以添加网关的时候系统会提示网络不可达 |
1 | [root@host01 ~]# route -n |
3.5 添加带metric的路由
1 | [root@host01 ~]# route -n |
七、tcpdump
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
1、语法选项
语法
1 | tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位] |
选项
参数 | 说明 |
---|---|
-a | 尝试将网络和广播地址转换成名称。 |
-A | 以ASCII格式打印出所有分组,并将链路层的头最小化。 |
-c <数据包数目> | 收到指定的数据包数目后,就停止进行倾倒操作。 |
-d | 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。 |
-dd | 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。 |
-ddd | 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。 |
-e | 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议; |
-f | 用数字显示网际网络地址。 |
-F <表达文件> | 指定内含表达方式的文件。 |
-i <网络界面> | 使用指定的网络截面送出数据包。 |
-l | 使用标准输出列的缓冲区。 |
-nn | 将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示。(-n 不把网络地址转换成名字) |
-N | 不列出域名。 |
-O | 不将数据包编码最佳化。 |
-p | 不让网络界面进入混杂模式。 |
-q | 快速输出,仅列出少数的传输协议信息。 |
-r <数据包文件> | 从指定的文件读取数据包数据。 |
-s <数据包大小> | 设置每个数据包的大小, 0表示包不截断, 抓完整的数据包。默认的话 tcpdump 只显示部分数据包, 默认68字节。 |
-S | 用绝对而非相对数值列出TCP关联数。 |
-t | 在每列倾倒资料上不显示时间戳记。 |
-tt | 在每列倾倒资料上显示未经格式化的时间戳记。 |
-T <数据包类型> | 强制将表达方式所指定的数据包转译成设置的数据包类型。 |
-v | 详细显示指令执行过程。(一般使用 -vv 更详细显示指令执行过程。) |
-X | 把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示)。 |
-w <数据包文件> | 直接将包写入文件中,并不分析和打印出来。 |
2、条件表达式
该表达式用于决定哪些数据包将被打印。如果不给定条件表达式,网络上所有被捕获的包都会被打印。否则,只有满足条件表达式的数据包被打印.(nt: all packets, 可理解为,所有被指定接口捕获的数据包)。
表达式由一个或多个表达元组成(nt:primitive,表达元,可理解为组成表达式的基本元素)。一个表达元通常由一个或多个修饰符(qualifiers)后跟一个名字或数字表示的id组成(nt:即 qualifiers id )。有三种不同类型的修饰符:type、dir以及 proto。
type 修饰符指定id 所代表的对象类型, id可以是名字也可以是数字.
1 | 可选的对象类型有: host, net, port 以及portrange(nt: host 表明id是主机, net 表明id是网络, port 表明id是端口,而portrange 表明id 是一个端口范围); |
dir 修饰符描述id 所对应的传输方向, 即发往id 还是从id 接收(nt: 而id 到底指什么需要看其前面的type 修饰符)。
1 | 可取的方向为: src, dst, src or dst, src and dst.(nt:分别表示, id是传输源, id是传输目的, id是传输源或者传输目的, id是传输源并且是传输目的); |
proto 修饰符描述id 所属的协议. 可选的协议有: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp以及 upd.
1 | (nt | rt: ether, fddi, tr, 具体含义未知, 需补充. 可理解为物理以太网传输协议, 光纤分布数据网传输协议,以及用于路由跟踪的协议; |
表达式顺序:proto > dir > type
1 | 对于修饰符后跟id 的格式,可理解为 type id 是对包最基本的过滤条件:即对包相关的主机,网络,端口的限制;dir 表示对包的传送方向的限制;proto表示对包相关的协议限制 |
3、常用示例
查看当前机器有哪些网络接口
1 | [root@k8s-master-192 ~]# tcpdump -D |
针对指定主机抓包
1 | tcpdump -i any -n -nn host 192.168.1.10 -w ./$(date +%Y%m%d%H%M%S).pcap |
针对指定端口抓包
1 | tcpdump -i any -n -nn port 80 -w ./$(date +%Y%m%d%H%M%S).pcap |
针对主机和端口抓包,两者关系 and
1 | tcpdump -i any -n -nn host 192.168.1.10 and port 80 -w ./$(date +%Y%m%d%H%M%S).pcap |
针对多个端口抓包
1 | tcpdump -i any -n -nn port 111 or port 443 |
针对多个主机抓包
1 | tcpdump -i any -n -nn host www.baidu.com or www.360.com |
抓取访问destination 443端口的包
1 | tcpdump -i any -n dst port 443 # 然后做一个curl https://www.baidu.com的操作 |
抓取源端口是80的包
1 | tcpdump -i any -nn src port 80 |
抓取源或者目标端口都是80的包
1 | tcpdump -i any -n -nn port 80 |
抓取源的端口是20-80的包
1 | tcpdump -i any -n src portrange 20-80 |
抓取端口是20-80的包,不考虑源或目标
1 | tcpdump -i any -n portrange 20-80 |
抓取destination为 www.baidu.com 的包
1 | tcpdump -i any dst www.baidu.com # 然后ping www.baidu.com ,以及 curl www.baidu.com |
抓取destination为192.168.1.[0-255]的包
1 | tcpdump -i any -n -nn dst 192.168.1 # 可以指定范围 ★★★★★ 注意用法 不是一个完整的IP地址 |
抓取source为192.168.. 的包
1 | tcpdump -i any -n -nn src host 192.168 # 等价于 tcpdump -i any -n -nn src 192.168 |
抓取192.168的包(不管是source还是destination )
1 | tcpdump -i any -n -nn host 192.168 |
抓取包长度小于800的包
1 | tcpdump -i any -n -nn less 800 |
抓取包长度大于800的包
1 | tcpdump -i any -n -nn greater 800 |
只抓取tcp包
1 | tcpdump -i any -n tcp |
只抓取udp包
1 | tcpdump -i any -n udp |
只抓取icmp的包,internet控制包
1 | tcpdump -i any -n icmp |