Linux常用网络命令总结

文章简单的介绍一些简单我们日常使用的一些命令,平时遇到问题时能够快速查找问题,提供一定的思路解决问题。

netstat

  这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:

  # sudo netstat -lnpt

  [sudo] password for fgp:

  Active Internet connections (only servers)

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

  tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2183/mysqld

  tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 2506/memcached

  tcp 0 0 0.0.0.0:9292 0.0.0.0:* LISTEN 1345/python

  tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 2185/ceph-osd

  tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 2185/ceph-osd

  tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN 1339/mongod

  tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 2185/ceph-osd

  tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 2185/ceph-osd

  tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1290/sshd

  netstat能够查看所有的网络连接,包括unix socket连接,其功能非常强大。

  另外使用netstat还可以查看本地路由表:

  # sudo netstat -nr

  Kernel IP routing table

  Destination  Gateway Genmask Flags MSS Window irtt Iface

  0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 brqcb225471-1f

  172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0

  192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 brqcb225471-1f

  192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

   以上Genmask为0.0.0.0的表示默认路由,即连接外网的路由。网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。

ifconfig  

  查看网卡ip地址:  

  # ifconfig eth0
  eth0 Link encap:Ethernet HWaddr 00:0C:29:A2:6E:53
  inet addr:172.16.100.100 Bcast:172.16.255.255 Mask:255.255.0.0
  inet6 addr: fe80::20c:29ff:fea2:6e53/64 Scope:Link
  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  RX packets:37795 errors:0 dropped:0 overruns:0 frame:0
  TX packets:55779 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:1000
  RX bytes:2912696 (2.7 MiB) TX bytes:5708099 (5.4 MiB)

  为网卡eth0增加一个新的地址(虚拟网卡):

  # sudo ifconfig eth0:0 10.103.240.2/24

  # ifconfig eth0:0

  eth0:0 Link encap:Ethernet HWaddr 08:00:27:c9:b4:f2

  inet addr:10.103.240.2 Bcast:10.103.240.255 Mask:255.255.255.0

  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

  关闭网卡以及开启网卡:

  sudo ifconfig eth0 down

  sudo ifconfig eth0 up

route

  route命令用于查看和修改路由表:

  查看路由表:sudo route -n

  增加/删除路由分别为add/del子命令,比如删除默认路由:sudo route del defau

  增加默认路由,网关为192.168.1.1,网卡为brqcb225471-1f:sudo route add default gw 192.168.1.1 dev brqcb225471-1f

  查看网卡eth1配置:

   # sudo ip link ls eth1

  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:a2:6e:53 brd ff:ff:ff:ff:ff:ff
  inet 172.16.100.100/16 brd 172.16.255.255 scope global eth0
  inet6 fe80::20c:29ff:fea2:6e53/64 scope link
  valid_lft forever preferred_lft forever

traceroute

  ping命令用于探测两个主机间连通性以及响应速度,而traceroute会统计到目标主机的每一跳的网络状态(print the route packets trace to network host),这个命令常常用于判断网络故障,比如本地不通,可使用该命令探测出是哪个路由出问题了。如果网络很卡,该命令可判断哪里是瓶颈:

  # sudo traceroute -I -n int32bit.me

  traceroute to int32bit.me (192.30.252.154), 30 hops max, 60 byte packets

  1 192.168.1.1 4.610 ms 5.623 ms 5.515 ms

  2 117.100.96.1 5.449 ms 5.395 ms 5.356 ms

  3 124.205.97.48 5.362 ms 5.346 ms 5.331 ms

  4 218.241.165.5 5.322 ms 5.310 ms 5.299 ms

  5 218.241.165.9 5.187 ms 5.138 ms 7.386 ms

  ...

  可以看到,从主机到int32bit.me共经过30跳,并统计了每一跳间的响应时间。另外可以参考tracepath。

ss

  ss命令也是一个查看网络连接的工具(another utility to investigate sockets),用来显示处于活动状态的套接字信息。关于ss的描述,引用Linux命令大全-ss命令。

  ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。

  其中比较常用的参数包括:

  -l 查看处于LISTEN状态的连接

  -t 查看tcp连接

  -4 查看ipv4连接

  -n 不进行域名解析

  因此我们可以通过ss命令查看本地监听的所有端口(和netstat命令功能类似):

  #ss -t -l -n -4

wget

  wget是一个强大的非交互网络下载工具(The non-interactive network downloader),虽然curl也支持文件下载,不过wget更强大,比如支持断点下载等。

  最简单的用法直接加上文件URL即可:wget http://xxx/xxx/video.mp4

  使用-r参数为递归的下载网页,默认递归深度为5,相当于爬虫,用户可以通过-l指定递归深度。注意wget默认没有开启断点下载功能,需要手动传入-c参数。

  如果需要批量下载,可以把所有的URL写入文件download.txt,然后通过-i指定下载文件列表:wget -i download.txt

  如果用户不指定保存文件名,wget默认会以最后一个符合/的后面的字符作为保存文件名,有时不是我们所期望的,此时需要-O指定保存的文件名。通过--limit-rate可以限制下载的最大速度。使用-b可以实现后台下载。

  另外wget甚至可以镜像整个网站:wget --mirror -p --convert-links -P int32bit http://int32bit.me

  wget还支持指定下载文件的格式,比如只下载jpg图片:wget -A.jpg -r -l 2 http://int32bit.me/

axel

  axel是一个多线程下载工具(A light download accelerator for Linux),通过建立多连接,能够大幅度提高下载速度,所以我经常使用这个命令开挂下载大文件,比wget快多了,并且默认就支持断点下载:

  开启20个线程下载文件:axel -n 20 URL

  这个强大的下载工具极力推荐,非常好用!

ipset

  以上我们通过iptables封IP,如果IP地址非常多,我们就需要加入很多的规则,这些规则需要一一判断,性能会下降(线性的)。ipset能够把多个主机放入一个集合,iptables能够针对这个集合设置规则,既方便操作,又提高了执行效率。注意ipset并不是只能把ip放入集合,还能把网络地址、mac地址、端口等也放入到集合中。

  首先我们创建一个ipset:

  # sudo ipset create blacklist hash:ip

  以上创建了一个blacklist集合,集合名称后面为存储类型,除了hash表,还支持bitmap、link等,后面是存储类型,我们指定的是ip,表示我们的集合元素为ip地址。

  我们为这个blacklist集合增加一条规则,禁止访问:

  # sudo iptables -I INPUT -m set --match-set blacklist src -j DROP

  此时只要在blacklist的ip地址就会自动加入黑名单。

  我们把192.168.56.1和192.168.56.3加入黑名单中:

  # sudo ipset add blacklist 192.168.56.3

  # sudo ipset add blacklist 192.168.56.1

此时ssh连接中断,使用vnc连接查看:

  # /github/int32bit.github.io$ sudo ipset list blacklist

  Name: blacklist

  Type: hash:ip

  Revision: 2

  Header: family inet hashsize 1024 maxelem 65536

  Size in memory: 176

  References: 1

  Members:

  192.168.56.1

  192.168.56.3

  把192.168.56.1移除黑名单:

  # sudo ipset del blacklist 192.168.56.1

 

  我们上面的例子指定的类型为ip,除了ip,还可以是网络段,端口号(支持指定TCP/UDP协议),mac地址,网络接口名称,或者上述各种类型的组合。比如指定 hash:ip,port就是 IP地址和端口号共同作为hash的键。指定类型为net既可以放入ip地址,也可以放入网络地址。

  另外ipset还支持timeout参数,可以指定时间,单位为秒,超过这个时间,ipset会自动从集合中移除这个元素,比如封192.168.56.11分钟时间不允许访问

  # sudo ipset create blacklist hash:net timeout 300

  # sudo ipset add blacklist 192.168.56.1 timeout 60

  以上首先创建了支持timeout的集合,这个集合默认超时时间为300s,接着把192.168.56.1加入到集合中并设置时间为60s。

  注意:执行ipset add时指定timeout必须保证创建的集合支持timeout参数,即设置默认的timeout时间.如果不想为集合设置默认timeout时间,而又想支持timeout,可以设置timeout为0,相当于默认不会超时。

  linux常用一些命令:

  • 网络配置相关:ifconfig、ip

  • 路由相关:route、netstat、ip

  • 查看端口工具:netstat、lsof、ss、nc、telnet

  • 下载工具:curl、wget、axel

  • 防火墙:iptables、ipset

  • 流量相关:iftop、nethogs

  • 连通性及响应速度:ping、traceroute、mtr、tracepath

  • 域名相关:nslookup、dig、whois

  • web服务器:python、nginx

  • 抓包相关:tcpdump

  • 网桥相关:ip、brctl、ifconfig、ovs

 

上一篇:【MyBatis】几种批量插入效率的比较


下一篇:为何曾经流行的匈牙利命名法忽然间销声匿迹了