Linux作为一款强大的操作系统,凭借其优异的的网络服务功能,被广泛使用到云服务中心、数据中心、嵌入式边缘物联代理等需要可靠的网络服务支持的场景中。具体到生成环境,免不了使用工具去管理和控制网络,本文就来带领大家细数一下,Linux下都有哪些提供网络管理的工具。
ifconfig
相信大家最为熟悉的就是ifconfig,作为网络接口的配置工具,经常用用来查看、配置网口的基本信息。
查看所有网口信息
ifconfig -a eth0 Link encap:Ethernet HWaddr 7E:8E:87:AD:39:EC inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7388 errors:0 dropped:0 overruns:0 frame:0 TX packets:1895 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2617515 (2.4 MiB) TX bytes:377852 (368.9 KiB) loLink encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:50 errors:0 dropped:0 overruns:0 frame:0 TX packets:50 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2401 (2.3 KiB) TX bytes:2401 (2.3 KiB)
up/down网口
ifconfig eth0 up/down
配置网口基本信息
ifconfig eth0 192.168.1.101/24 up
ip
大家对于ip的熟悉程度可能低于ifconfig,但是,如果作为一名专业的Linux网络维护者而言,可以不会使用ifconfig,但是必须会使用ip。因为,ip的功能更为全面和强大,其不仅可以配置普通网口设备,还可以配置路由信息,策略路由、隧道等更为强大的功能。并且有的机器上默认是不安装ifconfig的,但ip肯定是会安装的。所以,为了能够正常的配置和使用网络,ip这个命令还是需要掌握的。
帮助信息
ip -h
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename where OBJECT := { link | address | addrlabel | route | rule | neighbor | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | fou | tcp_metrics | token | netconf } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -br[ief] | -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] | -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}
一条ip命令的基本格式为:ip [ OPTIONS ] OBJECT { COMMAND | help },COMMAND与具体的OBJECT有关,基本的包括:add、delete、list、help。
具体到每个OBJECT,可以通过ip OBJECT help查看更为具体的帮助信息,比如,查看ip addr help
ip addr help Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ] [ CONFFLAG-LIST ] ip addr del IFADDR dev STRING ip addr {show|flush} [ dev STRING ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label STRING ] [ scope SCOPE-ID ] SCOPE-ID := [ host | link | global | NUMBER ] FLAG-LIST := [ FLAG-LIST ] FLAG FLAG := [ permanent | dynamic | secondary | primary | tentative | deprecated | dadfailed | temporary | CONFFLAG-LIST ] CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG CONFFLAG := [ home | nodad ] LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ] LFT := forever | SECONDS
地址配置
ip addr help #查看ip addr命令使用帮助信息 ip addr add 192.168.1.100/24 dev eth0 #配置eth的IP ip addr del 192.168.1.100/24 dev eth0 #删除eth的IP ip addr show
链路配置 ip link help #查看ip link使用帮助信息 ip link set eth0 up/down ip link show
路由配置
ip route help ip route add 192.168.1.0 dev eth0 # 目的网路地址为192.168.1.0的出口设备为eth0 ip route add default via 192.168.1.100 # 默认路由的出口IP为192.168.1.100 ip route show
netstat
netstat用于打印有关网络连接信息、路由信息、网络统计信息等,是调试TCP连接问题,统计网络信息的利器。下面是netstat的基本用法,足够日常调试使用。
基本功能
Display networking information
-r Routing table #显示路由信息 -a All sockets #显示所有socket信息 -l Listening sockets #显示处于Listenting状态的socket Else: connected sockets -t TCP sockets #显示TCP socket -u UDP sockets #显示UDP socket -w Raw sockets #显示Raw socket -x Unix sockets #显示Unix socket Else: all socket types -e Other/more information -n Don't resolve names #显示IP地址信息,而不是hostname -W Wide display -p Show PID/program name for sockets# 显示socket相关的进程ID信息
显示当前系统所有TCP scoket相关信息
netstat -natlp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN 761/inetd tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 761/inetd
显示当前系统所有UDP socket相关信息
netstat -naulp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:518 0.0.0.0:* 761/inetd
tcpdump
对于网络程序开发者来说,一定会涉及到网络协议的处理,那有时为了分析网络数据包的就免不了使用抓包工具,进行网络数据包的抓取和分析。tcpdump就是完成该项功能的神器。tcpdump的功能十分的强大,命令参数也是十分的复杂。但是,根据二八原则,大部分的命令参数是不会经常使用的,下面介绍的也是tcpdump使用比较高频的命令参数。
抓取特定网卡的数据包
tcpdump -i eth0
过滤源或者目的ip
tcpdump -i eth0 src 192.168.1.1 and dst 192.168.2.100
过滤指定协议和端口号的数据包
tcpdump -i eth0 -p tcp port 80 tcpdump -i eth0 -p udp port 9900
显示数据包的详细信息
tcpdump -i eth0 -p tcp port 80 -XX -n -XX:分析、打印协议的头部信息,打印数据信息,打印方式为十六进制和ACSII码 -n:显示IP地址信息
保存抓取大数据包 tcpump -i eth0 -w file
-w:可以将抓取到的数据保存到文件中。
ifplugd
嵌入式Linux环境下, 网络设备的状态经常发生变化,比如,RJ45接口网线通断状态。ifplugd一般用于嵌入式Linux环境,用于实时监测网口事件,其可以指定具体的脚本用来处理具体的事件。
下面是ifplugd的基本命令参数。
-n Don't daemonize #以前台运行方式运行,默认为后台方式。 -s Don't log to syslog -i IFACE Interface #指定监测网口 -f/-F Treat link detection error as link down/link up (otherwise exit on error) -a Don't up interface at each link probe -M Monitor creation/destruction of interface (otherwise it must exist) -r PROG Script to run #指定检测到网络事件时,要执行的脚本 -x ARG Extra argument for script -I Don't exit on nonzero exit code from script #脚本执行失败时,ifplugd不会停止运行 -p Don't run script on daemon startup -q Don't run script on daemon quit -l Run script on startup even if no cable is detected -t SECS Poll time in seconds -u SECS Delay before running script after link up #检测到link up,延迟一段时间再执行脚本 -d SECS Delay after link down -m MODE API mode (mii, priv, ethtool, wlan, iff, auto) -k Kill running daemon #杀死后台ifplugd程序
ifplugd的使用命令一般如下:
/usr/bin/ifplugd -u 5 -I -l -i eth0 -r /etc/network/if.sh
根据具体事件执行脚本
if.sh为一个脚本,其实现了关于网口up、down事件的处理逻辑,其内容一般为:
ETH="$1" STATE="$2" if [ ${STATE} = "up" ]; then /sbin/ifup ${ETH}; fi if [ ${STATE} = "down" ]; then /sbin/ifdown ${ETH}; fi ETH为网口名称,比如,eth0,STATE为具体的命令。
ifup和ifdown根据/etc/interface中的配置信息,完成对网口的操作。
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) # The loopback interface auto lo iface lo inet loopback # Wired or wireless interfaces auto eth0 iface eth0 inet dhcp
延时执行
-u 5:表示在检测到link up事件5秒之后,再运行if.sh脚本。这个选项在设备连接网络设备时,十分的有用,比如,一个设备通过网线连 接到了一个路由,设备首先上电运行,而后路由器再上电,如果设备在检测到link up之后,立即执行if.sh脚本,那么,很有可能由于路 由器还未完全启动完毕,而导致设备无法获取到IP地址,而通过-u选项延迟一段时间为的是等待路由器完成启动。
nc
nc又名netcat,它的功能十分的强大,既可以为作为UDP、TCP客户端去连接服务器,可以作为UDP、TCP服务器等待客户端的连接。当你写了一个TCP客户端,想测试一下它的功能,但是,这时候需要一个TCP服务端,你可能会再次实现一个,有了nc,完全没有这个必要,你只要简单运行nc指定端口,一个简单TCP的服务端就搭建好了,酷不酷。
nc作为TCP服务端,端口为8081
nc -l 8081 # -l指定TCP的监听端口
nc作为TCP客户端,去连接服务端
nc SERVER_IP 8081
nc作为UDP服务端,端口为8081
nc -u -l 8081 # -u指定为UDP协议
nc作为UDP客户端,去连接服务端
nc -u SERVER_IP 8081
端口扫描
nc -zv www.google.com 1-1000 #扫描www.google.com 1-1000端口
文件传输
文件接收方: nc -l port > filename # port指定TCP端口,filename文件名 文件发送方: nc SERVER_IP port < filename # SERVER_IP指定文件接收方IP地址和端口号,filename指定要发送的文件 这个命令太酷了,运用TCP模式下的nc,简单几个参数就可以实现可靠的文件传输,太棒了。
克隆硬盘或者分区
其与文件传输类似,主要借助了dd这个文件拷贝命令。
文件接收方: nc -l port | dd of=/dev/sda #指定接收方的磁盘分区,或者使用of=filename,将数据保存到文件中。 文件发送方: dd if=/dev/sda | nc SERVER_IP port
好了,以上就是linux下使用比较高频的工具,本文只介绍了各个工具的基本用法,大家如有兴趣可以通过Man手册深入探究,Enjoy it!