作为一名 IT 从业者,经常都要跟 Linux 打交道,其中网络更是用得频繁,掌握基本的网络命令是必备的技能,更是提高我们工作效率的必备良器,今天这篇文章就来梳理下常用的网络工具。因为梳理的命令比较多,所以文章自然不会深入介绍这些命令的用法,大家可以有个印象,然后学习工作中碰到了再具体去查好了。 总的来说,Linux 网络命令涉及到这么几块:
01 网络配置最重要的两个工具就是 ifconfig 和 ip,这两个工具分别来自两个工具包 net-tools 和 iproute2,其中, net-tools 包还包含如 route、 netstat、 tc、 ifstat 等等常用的工具,不过, net-tools 包已经逐步在被 iproute2 包替换。对于我们学习来说,不妨都学习下,这样也有助于理解和记忆。 1.1 ifconfig ifconfig 通常是用来查看网卡的信息(比如 IP 地址、收发包及丢包情况等),以及配置网卡(如启停网卡,修改网卡 MTU,修改 IP、MAC 地址等) 查看网卡信息: 给网卡配置 IP 地址: 开关网卡: ifconfig eth0 downifconfig eth0 up 1.2 ip ip 是非常强大的工具,可以替换 net-tools 包的所有工具,如常见的 ifconfig、 netstat、 route、 arp 等,比如查看网卡信息: 查看路由: 查看 arp 信息: 更多的用法大家用到可以 man ip 一下。 02 连通性探测连通性探测意在使用工具探测两个网络节点之间的连通性,常用的有 ping、 telnet、 traceroute、 tracepath、 mtr 等工具。 2.1 ping 这个命令通常用来判断网络的连通性和网速情况,偶尔用来查看域名的 IP,比如: 可以看到百度对应域名的 IP。 使用 -c 参数可以指定发送数据包的个数, -w 指定最长等待时间, -I指定发送数据包的网卡。 ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。 2.2 telnet telnet 通常用作远程登录,用来确定远程服务的状态,探测远程服务器的某个端口是否能访问,也可以探测本地的,如: 可见成功连接到 localhost 的 22 端口,说明该端口已经打开。 2.3 traceroute & tracepath traceroute 主要用来探测从源主机到目标主机之间的每一跳路由节点,通常和 ping 结合起来排查网络故障, ping 测连通性和网速,如果网络不通,可以借由 traceroute 进一步排查是哪个路由节点出问题了。如果网络卡顿,也可以判断出哪里是瓶颈。 可以看到,从主机到 baidu.com 共经历了 30 跳,每一跳都统计了响应时间。 类似的工具还有一个 tracepath。 2.4 mtr mtr 全称是 mytraceroute,是一个集大成的工具,它集成了 ping、 traceroute、 nslookup 的功能,诊断网络问题非常方便。 mtr 有个好处就是能够 实时刷新 数据,比如 mtr-n www.baidu.com 可以看到,从本地到百度经过的所有路由,并显示每个路由间的丢包率、响应时间等。 常用参数: mtr -r 不会刷新,一次性打印 10个包的统计结果mtr -s 用来指定ping数据包的大小mtr -n no-dns不对IP地址做域名反解析mtr -a 来设置发送数据包的IP地址,这个用于主机有多个IP时。mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒mtr -c 指定发送多少个数据包mtr -4 IPv4mtr -6 IPv6 03 网络连接主要涉及到对网络连接状态的统计,比如连接打开了哪些端口、TCP/UDP、socket 的状态是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。 3.1 netstat netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 unix socket 等,也是集多种工具于一身的组合工具。最常用的就是用来检查本地系统都打开了哪些端口: 其他的一些常见用法还有:
3.2 ss ss 和 netstat 类似,也是用来查看网络连接统计的工具,它的输出也和 netstat 类似,甚至显示更多连接状态信息,它最大的优势在于比 netstat 快,在服务器维持上万个连接的情况下,这种优势就体现得比较明显。 常用参数:
通常使用 ss-tln4 查看本地监听的所有端口。 3.3 lsof lsof 可以列出当前系统打开文件、打开文件的进程、进程打开的端口。由于在 Linux 中一切皆文件,所以, lsof 也常用来统计网络相关的文件信息(使用 -i 选项),如 TCP/UDP/Unix socket 的统计信息。 它的使用格式为 [46][protocol][@hostname|hostaddr][:service|port],比如: 列出所有与主机 172.18.82.173(我的主机IP)22 号端口的 ipv4 连接: 3.4 netcat(nc) nc 被称为瑞士军刀,非常轻巧但功能强大,能够创建各种不同类型的网络连接、能够实现简单的聊天工具、远程传输文件、debug 分析、扫描端口等。 比如扫描主机 172.18.82.173 的 1-100 哪些端口开放: 可以看到,该主机开放了 22 和 80 端口。 04 流量统计4.1 ifstat ifstat 主要用来监测主机网口的网络流量,常用的选项包括:
比如,通过以下命令统计主机所有网口某一段时间内的流量数据: 4.2 sar sar 是一个系统历史数据统计工具。统计的信息非常全,包括 CPU、内存、磁盘 I/O、网络、进程、系统调用等等信息。网络信息通常使用 -n参数来统计,常用几个选项如下:
4.3 iftop 和 top、 iotop 是一个系列,它主要用来查看网络流量。 05 交换与路由5.1 arp 用来管理主机的 ARP 缓存,增删查改等。 常见用法:
5.2 arping 查看本 LAN 内 IP 对应的主机 MAC 地址,以及 MAC 的占用问题。 比如,指定从某个接口向某台主机发送 ARP 包,来获得 MAC 地址。 5.3 vconfig Linux vlan 配置命令,比如给某个接口增加两个 vlan 是: vconfig add eth0 100vconfig add eth0 200 删除 vlan 是: vconfig rem eth0.100vconfig rem eth0.200 5.4 route route 用来查看和修改路由表,同样工具还有 netstat-r 和 ip route。
比如添加一条默认路由: route add default gw 192.168.1.1 dev eth0 06 防火墙6.1 iptables iptables 是强大的包过滤工具。 iptables 通过一系列规则来过滤、处理数据包,能够实现防火墙、NAT等功能。 当一个网络包进入到主机之前,会经过一系列的 iptables 规则检查,如何通过则接受,否则就丢弃,iptables 的规则由多个表组成,每个表又由多条链构成,整体比较复杂,对于这个工具,我们 后面再出一篇文章来进行详细讲解。 6.2 ipset ipset 是一个辅助 iptables 的工具,通常用在限制多个 IP 的场景下,使用 ipset,可以将多个 IP 放入一个集合,然后 iptables 针对这个集合做限制,这样可以大大提高效率。 ipset除了可以集合 IP 外,还可以集合 网段、MAC、端口、网卡等。 常用操作比如: 创建一个 ipset: ipset create blacklist hash:ip
往集合中增加项: ipset add blacklist 192.168.10.2 从集合中移除项: ipset del blacklist 192.168.10.2 还可以指定超时时间限制: ipset create blacklist hash:net timeout 60 07 域名相关7.1 host host 命令是域名分析查询工具,用来测试域名系统工作是否正常。 比如查看百度域名信息: [root@by ~] host www.baidu.comwww.baidu.com is an alias for www.a.shifen.com.www.a.shifen.com has address 14.215.177.38www.a.shifen.com has address 14.215.177.39 7.2 nslookup nslookup 用于交互式域名解析,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。 查看 google.com 的 DNS 地址: 查看使用的 DNS 服务器地址: [root@by ~]# nslookup> serverDefault server: 8.8.8.8Address: 8.8.8.8#53Default server: 8.8.4.4Address: 8.8.4.4#53 7.3 dig dig 命令也是域名解析工具,但是比 nslookup 提供的更全面: 7.4 whois whois 用于查看域名所有者的信息,比如注册邮箱、手机号码、域名服务商等。 比如,查看 coolshell.cn 这个域名是陈皓在万网注册的,注册时间是 2009 年,注册邮箱是 haoel@hotmail.com。 08 抓包相关8.1 tcpdump tcpdump 是 Linux 下最为强大的抓包工具。之前写过一篇完整的文章,详细请看这里: Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收! 09 虚拟设备虚拟设备指的是针对 tap/tun、veth-pair、bridge、ovs 等设备的工具。 对于这些设备的操作命令,都隶属于 ip 命令,比如 tap/tun 设备是 ip tuntap、veth-pair 和 bridge 是 ip link和 ip netns。 除此之外,还有一些相关的辅助工具。 9.1 tunctl tunctl 实现和 ip tuntap 类似,用来创建 tap/tun 设备。 默认创建 tap 接口: tunctl 以上等价于 tunctl-p 为用户 user 创建一个 tap 接口: # tunctl -u user 创建 tun 接口: tunctl -n 删除接口: # tunctl -d tap0 9.2 brctl brctl 用来操作 bridge 网桥,可用于查看网桥、创建网桥、把网卡加入网桥等。 [root@by ~]# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000000000000 no OVS 是网桥的第三方开源实现,它自带一套命令集,有兴趣的读者可以进一步研究下。 10 总结以上便是平时常用的网络工具集合,除此之外,其实还有很多,推荐大家重点掌握以上这些,如有不懂的地方,man 一下就清楚了。 除了命令之外,跟网络相关的还有一些重要文件,比如:
NDK基础开发流程—Linux流程 |
|
来自: wq2g2ds152m668 > 《linux》