Linux网络工具大全及使用指南

更新:11-09 现代故事 我要投稿 纠错 投诉

大家好,今天给各位分享Linux网络工具大全及使用指南的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

使用此命令来确定网络连通性和速度,偶尔也将其用于域名解析(检查域名的IP):

ping google.com

默认情况下,该命令将持续发送ICMP 数据包,直到用户手动终止它。可以使用-c命令指定发送的数据包数量,使用-W指定最大等待时间。如果有多个网卡,还可以通过-I指定发送的数据包。网卡。

提示: 按ctrl+| ping过程中会打印出当前的摘要信息,统计当前发送的包数、接收的包数、丢包率等。

其他如-b 发送广播。另请注意,ping 只能使用ipv4。如果需要使用ipv6,可以使用ping6命令。

网络统计

该命令用于查看当前建立的网络连接(了解netstat各项的含义)。最经典的案例是检查本地系统打开了哪些端口:

fgp@controller:~$ sudo netstat -lnpt

[sudo] fgp: 的密码

有效的互联网连接(仅限服务器)

Proto Recv-Q Send-Q 本地地址外部地址状态PID/程序名称

tcp 0 0 0.0.0.0:3306 0.0.0.0:* 监听2183/mysqld

tcp 0 0 0.0.0.0:11211 0.0.0.0:* 监听2506/memcached

tcp 0 0 0.0.0.0:9292 0.0.0.0:* 监听1345/python

tcp 0 0 0.0.0.0:6800 0.0.0.0:* 监听2185/ceph-osd

tcp 0 0 0.0.0.0:6801 0.0.0.0:* 监听2185/ceph-osd

tcp 0 0 0.0.0.0:28017 0.0.0.0:* 监听1339/mongod

tcp 0 0 0.0.0.0:6802 0.0.0.0:* 监听2185/ceph-osd

tcp 0 0 0.0.0.0:6803 0.0.0.0:* 监听2185/ceph-osd

tcp 0 0 0.0.0.0:22 0.0.0.0:* 监听1290/sshd

Netstat可以查看所有网络连接,包括unix socket连接,其功能非常强大。

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

fgp@controller:~$ sudo netstat -nr

内核IP路由表

目标网关Genmask 标志MSS 窗口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表示默认路由,即连接外网的路由。网络中的IP地址0.0.0.0代表整个网络,即网络中的所有主机。它的作用是帮助路由器发送在路由表中无法查询到的数据包。如果设置了全零网络的路由,则在路由表中查询不到的报文将被发送到全零网络的路由。

拉索夫

lsof命令用于查看打开的文件(列出打开的文件)。由于Linux中一切都是文件,套接字、管道等也是文件,因此可以查看网络连接和网络设备。与网络最相关的是-i 选项。它输出合格的进程(4、6、协议、端口、@ip等)。其格式为[46][协议][@主机名|主机地址][:服务|端口]。例如,检查22端口是否开放。哪个进程打开了:

fgp@controller:~$ sudo lsof -i :22

命令PID 用户FD 类型设备大小/关闭节点名称

sshd 1290 root 3u IPv4 10300 0t0 TCP *:ssh(监听)

sshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh(监听)

可以看到sshd命令打开了22端口,其进程号pid为1290。

可以指定多个条件,但默认为OR 关系。如果需要AND关系,则必须传入-a参数,比如查看22端口的进程,使用Ipv6连接:

fgp@controller:~$ sudo lsof -c sshd -i 6 -a -i :22

命令PID 用户FD 类型设备大小/关闭节点名称

sshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh(监听)

列出到192.168.56.1(我的主机IP 地址)的所有ipv4 连接:

fgp@controller:~$ sudo lsof -i 4@192.168.56.1

命令PID 用户FD 类型设备大小/关闭节点名称

sshd 2299 root 3u IPv4 14047 0t0 TCP 控制器:ssh-mac:54558(已建立)

sshd 2377 fgp 3u IPv4 14047 0t0 TCP 控制器:ssh-mac:54558(已建立)

伊夫托普

用过top和iotop的人自然能大致猜到iftop的功能。它是一个查看网络流量的工具(显示主机在接口上的带宽使用情况):

须藤iftop

图片.pngiftop

数控

nc(netcat)被称为网络工具中的瑞士军刀,它非常轻巧但功能强大!通常用作网络应用程序的调试分析器,它可以根据需要创建各种类型的网络连接。官方描述的功能包括:

简单的TCP 代理

基于shell 脚本的HTTP 客户端和服务器

网络守护进程测试

用于ssh 的SOCKS 或HTTP ProxyCommand(1)

还有很多很多,总之它非常强大,可以实现简单的聊天工具、模拟SSH登录远程主机、远程文件传输等。一个经典的用法就是端口扫描。比如我要扫描192.168.56.2主机的1~100端口,检测哪些端口开放(黑客攻击所必需):

fgp@controller:~$ nc -zv 192.168.56.2 1-100 | grep "成功!"

连接192.168.56.2 22端口[tcp/ssh]成功!

连接192.168.56.2 80端口[tcp/http]成功!

从结果中我们发现主机开放了22和80端口。

tcp转储

tcpdump(转储网络流量)是一个功能强大的命令行数据包捕获工具。不要被它的名字误导,以为它只能捕获TCP 数据包。它可以捕获任何协议的数据包。它可以实现与Wireshark相同的功能,并且更加灵活、自由!例如,需要捕获目标主机192.168.56.1以及通过22端口传输的数据包:

sudo tcpdump -n -i eth1 "目标主机192.168.56.1 端口22"

输出是:

tcpdump: 详细输出被抑制,使用-v 或-vv 进行完整协议解码

监听eth1,链路类型EN10MB(以太网),捕获大小65535 字节

23:57:39.507490 IP 192.168.56.2.22 192.168.56.1.54558: 标志[P.],seq 3010719012:3010719120,ack 1116715283,win 354, [ nop,nop,TS val 1049052 ecr 187891473],长度108

23:57:39.507607 IP 192.168.56.2.22 192.168.56.1.54558: 标志[P.],seq 108:144,ack 1,win 354,选项[nop,nop,TS val 1049052 ecr 18 7 891473],长度36

23:57:39.507784 IP 192.168.56.2.22 192.168.56.1.54558: 标志[P.],seq 144:252,ack 1,win 354,选项[nop,nop,TS val 1049052 ecr 18 7 891476],长度108

抓取HTTP数据包:

sudo tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 或tcp[20:2]=0x4854

其中0x4745是‘GET’、‘GE’的前两个字母,0x4854是‘HTTP’、‘HT’的前两个字母。

指定-A以ACII代码输出数据包,使用-c指定捕获数据包的数量。

远程登录

Telnet协议客户端(TELNET协议的用户界面),但其功能不限于telnet协议,有时也用于检测端口,例如检查本地22端口是否开放:

fgp@controller:~$ telnet 本地主机22

正在尝试:1.

连接到本地主机。

转义字符是“^]”。

SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6

可以看到,成功连接localhost的22端口,说明该端口已经开放,并输出了banner信息。

如果配置

ifconfig也是大家熟悉的网卡配置工具(配置网络接口)。我们经常用它来查看网卡信息(如IP地址、发送包数、接收包数、丢包数等)以及配置网卡(启用关闭网卡、修改网络mtu) 、修改ip地址等)。

查看网卡IP地址:

fgp@controller:~$ ifconfig eth0

eth0链接encap:以太网硬件地址08:00:27:c9:b4:f2

inet6 addr: fe80:a00:27ff:fec9:b4f2/64 Scope:Link

上行广播运行组播MTU:1500 指标:1

RX 数据包:27757 错误:0 丢弃:0 溢出:0 帧:0

TX 数据包:589 错误:0 丢弃:0 超限:0 运营商:0

碰撞:0 txqueuelen:1000

RX 字节:10519777 (10.5 MB) TX 字节:83959 (83.9 KB)

为网卡eth0添加新地址(虚拟网卡):

fgp@controller:~$ sudo ifconfig eth0:0 10.103.240.2/24

fgp@controller:~$ ifconfig eth0:0

eth0:0 链接encap:以太网HWaddr 08:00:27:c9:b4:f2

inet addr:10.103.240.2 Bcast:10.103.240.255 Mask:255.255.255.0

上行广播运行组播MTU:1500 指标:1

关闭网卡并打开网卡:

sudo ifconfig eth0 下来

sudo ifconfig eth0 up

nslookupdig

nslookup 用于交互式域名解析(交互式查询Internet 名称服务器)。当然,你也可以直接传入域名,作为Ad-Hoc命令使用,比如检查google.com的IP地址:

fgp@controller:~$ nslookupgoogle.com

服务器: 114.114.114.114

地址: 114.114.114.114#53

非权威答案:

名称: google.com

地址: 37.61.54.158

检查使用的DNS服务器地址:

fgp@controller:~$ nslookup

服务器

默认服务器: 114.114.114.114

地址: 114.114.114.114#53

默认服务器: 8.8.8.8

地址: 8.8.8.8#53

dig 命令也是一个域名解析工具(DNS 查找实用程序),但它提供了更全面的信息:

fgp@controller:~$ diggoogle.com

;DiG 9.9.5-3ubuntu0.8-Ubuntugoogle.com

;全局选项: +cmd

;得到答复:

; -HEADER-操作码:查询,状态:无错误,id: 53828

; flags: qr rd ra;查询: 1、答案: 1、权威: 4、附加: 4

;问题部分:

;google.com。在A

;答案部分:

google.com。 2730 于37.61.54.158

;权力部分:

google.com。 10204 IN NS ns2.google.com。

google.com。 10204 在NS ns4.google.com。

google.com。 10204 在NS ns3.google.com。

google.com。 10204 IN NS ns1.google.com。

;附加部分:

ns1.google.com。 86392 在216.239.32.10

ns2.google.com。 80495 在216.239.34.10

ns3.google.com。 85830 在216.239.36.10

ns4.google.com。 13759 在216.239.38.10

;查询时间: 17 毫秒

;服务器: 114.114.114.114#53(114.114.114.114)

; WHEN: 星期四5 月5 日00:11:48 CST 2016

;味精尺寸rcvd: 180

域名查询

Whois用于查看域名所有者信息(whois目录服务的客户端),例如注册的电子邮件地址、手机号码、域名服务提供商等:

fgp@controller:~$ whoiscoolshell.cn

域名:coolshell.cn

ROID: 20090825s10001s91994755-cn

域名状态: 正常

注册人ID: hc401628324-cn

注册人: 陈浩

注册人联系邮箱:haoel@hotmail.com

赞助Registrar: 阿里云计算有限公司(万网)

名称服务器: f1g1ns1.dnspod.net

名称服务器: f1g1ns2.dnspod.net

报名时间: 2009-08-25 00:40:26

过期时间: 2020-08-25 00:40:26

DNSSEC: 未签名

我们发现,coolshell.cn域名是陈浩在万网购买并注册的。注册时间为2009年,注册邮箱为haoel@hotmail.com。

路线

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

查看路由表:

fgp@controller:~$ sudo 路由-n

内核IP路由表

目标网关Genmask 标记度量参考使用Iface

0.0.0.0 192.168.1.1 0.0.0.0 UG 100 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

添加/删除路由都是add/del子命令,比如删除默认路由:

sudo 路由删除默认值

添加默认路由,网关为192.168.1.1,网卡为brqcb225471-1f:

sudo 路由添加默认gw 192.168.1.1 dev brqcb225471-1f

ip

ip命令可以说是极其强大的。可以完全替代ifconfig、netstat、route、arp等命令。例如查看网卡eth1的IP地址:

[]内的内容表示:可写,也可不写。

如果是{},您必须选择{} 中给出的选项之一。

fgp@controller:~$ sudo ip addr ls dev eth1

3: eth1:mtu 1500 qdisc pfifo_fast 状态UP 组默认qlen 1000

链接/以太08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff

inet 192.168.56.2/24 brd 192.168.56.255 范围全局eth1

永远有效_lft 永远首选_lft

inet6 fe80:a00:27ff:fe9a:d5d1/64 范围链接

永远有效_lft 永远首选_lft

检查网卡eth1配置:

fgp@controller:~$ sudo ip link ls eth1

3: eth1:mtu 1500 qdisc pfifo_fast 状态UP 模式DEFAULT 组默认qlen 1000

链接/以太08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff

查看路线:

fgp@controller:~$ ip 路由

默认通过192.168.1.1 dev brqcb225471-1f

172.17.0.0/16 dev docker0 proto 内核范围链接src 172.17.0.1

192.168.1.0/24 dev brqcb225471-1f 原型内核范围链接src 192.168.1.105

192.168.56.0/24 dev eth1 原型内核范围链接src 192.168.56.2

查看arp信息:

fgp@controller:~$ sudo ip neigh

192.168.56.1 dev eth1 lladdr 0a:00:27:00:00:00 可到达

192.168.0.6 dev vxlan-80 lladdr fa:16:3e:e1:30:c8 永久

172.17.0.2 dev docker0 lladdr 02:42:ac:11:00:02 陈旧

192.168.56.3 dev eth1 失败

192.168.1.1 开发brqcb225471-1f lladdr 30:f

c:68:41:12:c6 STALE 查看网络命名空间: fgp@controller:~$ sudo ip netns ls qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21 qdhcp-9284d7a8-711a-4927-8a10-605b34372768 qdhcp-cb225471-1f85-4771-b24b-a4a7108d93a4 进入某个网络命名空间: fgp@controller:~$ sudo ip netns exec qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21 bash root@controller:~# ifconfig qg-0d258e6d-83 Link encap:Ethernet HWaddr fa:16:3e:93:6f:a3 inet addr:172.16.1.101 Bcast:172.16.1.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fe93:6fa3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1035 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:102505 (102.5 KB) TX bytes:1200 (1.2 KB) brctl brctl是linux网桥管理工具,可用于查看网桥、创建网桥、把网卡加入网桥等。 查看网桥: fgp@controller:~$ sudo brctl show bridge name bridge id STP enabled interfaces brq9284d7a8-71 8000.12841adee45f no tap36daf550-27 tape729e013-df vxlan-80 brqcb225471-1f 8000.080027c9b4f2 no eth0 tap0d258e6d-83 tapb844e7a5-83 docker0 8000.0242e4580b61 no veth50ed8dd 以上因为部署了openstack neutron以及docker,因此网桥比较复杂。 其他子命令如addbr用于创建网桥、delbr用户删除网桥(删除之前必须处于down状态,使用ip link set br_name down)、addif把网卡加到网桥等。 traceroute ping命令用于探测两个主机间连通性以及响应速度,而traceroute会统计到目标主机的每一跳的网络状态(print the route packets trace to network host),这个命令常常用于判断网络故障,比如本地不通,可使用该命令探测出是哪个路由出问题了。如果网络很卡,该命令可判断哪里是瓶颈: fgp@controller:~$ sudo traceroute -I -nint32bit.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。 mtr mtr是常用的网络诊断工具(a network diagnostic tool),它把ping和traceroute并入一个程序的网络诊断工具中并实时刷新。 mtr -n int32bit.me 输出如图: image.pngmtr从图上可以看出从本地到int32bit.me经过的所有路由,每一个路由间的丢包率、响应时间等。 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 输出如图: image.pngcurl curl是强大的URL传输工具,支持FILE, FTP, HTTP, HTTPS, IMAP, LDAP, POP3,RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET以及TFTP等协议。我们使用这个命令最常用的功能就是通过命令行发送HTTP请求以及下载文件,它几乎能够模拟所有浏览器的行为请求,比如模拟refer(从哪个页面跳转过来的)、cookie、agent(使用什么浏览器)等等,同时还能够模拟表单数据。 curl -X POST -d "DDDDD=2013140333&upass=1q2w3e4r&save_me=1&R1=0" 10.3.8.211 以上方法利用curl往认证服务器发送POST请求,发送数据为用户名以及密码(模拟表单输入)。 具体用法参考buptLogin。 Openstack的命令行工具,比如nova,传入--debug参数就会显示curl往nova-api的curl REST请求。 curl命令非常强大,掌握了它能够发挥巨大的作用,其他有用参数列举如下: -i 显示头部信息 -I 只显示头部信息,不显示正文 -X 指定请求方法,比如GET、POST等 -d 发送数据 --form模拟表单,利用这个参数可以上传文件、模拟点击按钮等 -A 指定用户代理,比如Mozilla/4.0,有些坑爹网址必须使用IE访问怎么办 -b 设置cookie -c 指定cookie文件 -e 指定referer,有些网址必须从某个页面跳转过去 --header 设置请求的头部信息 --user 有些页面需要HTTP认证, 传递name:password认证wget wget是一个强大的非交互网络下载工具(The non-interactive network downloader),虽然curl也支持文件下载,不过wget更强大,比如支持断点下载等。 最简单的用法直接加上文件URL即可: wgethttp://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 int32bithttp://int32bit.me wget还支持指定下载文件的格式,比如只下载jpg图片: wget -A.jpg -r -l 2http://int32bit.me/ axel axel是一个多线程下载工具(A light download accelerator for Linux),通过建立多连接,能够大幅度提高下载速度,所以我经常使用这个命令开挂下载大文件,比wget快多了,并且默认就支持断点下载: 开启20个线程下载文件: axel -n 20 URL 这个强大的下载工具极力推荐,非常好用! nethogs 我们前面介绍的iftop工具能够根据主机查看流量(by host),而nethogs则可以根据进程查看流量信息(Net top tool grouping bandwidth per process)。ubuntu14.04中使用apt-get安装的有bug,需要手动安装: sudo apt-get install build-essential libncurses5-dev libpcap-dev git clonehttps://github.com/raboof/nethogs cd nethogs make -j 4 编译完后执行 ./nethogs eth1 我们指定了监控的网卡为eth1,结果如图: image.png由于eth1是私有ip,只有ssh进程,从图中我们可以看到它的进程号为17264,程序为sshd,共发送了1.593MB数据,接收了607.477MB数据(scp了一个镜像文件)。按m键还能切换视角查看当前流量。 iptables iptables是强大的包过滤工具,Docker、Neutron都网络配置都离不开iptables。iptables通过一系列规则来实现数据包过滤、处理,能够实现防火墙、NAT等功能。当一个网络数据包进入到主机之前,先经过Netfilter检查,即iptables规则,检查通过则接受(Accept)进入本机资源,否则丢弃该包(Drop)。规则是有顺序的,如果匹配第一个规则,则执行该规则的Action,不会执行后续的规则。iptables的规则有多个表构成,每个表又由链(chain)构成,每个表的功能不一样,本文只涉及两个简单的表,即Filter表和NAT表,望文生义即可了解,Filter表用于包过滤,而NAT表用来进行源地址和目的地址的IP或者端口转换。 1.Filter表 Filter表主要和进入Linux本地的数据包有关,也是默认的表。该表主要由三条链构成: INPUT:对进入主机的数据包过滤 OUTPUT:对本地发送的数据包过滤 FORWARD:传递数据包到后端计算机,与NAT有点类似。查看本地的Filter表: fgp@controller:~$ sudo iptables -n -t filter --list [root@portal ~]# iptables -n -t filter --list Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 其中-n表示不进行域名解析,-t指定使用的表,--list表示列出所有规则。我们发现目前没有定义任何规则。注意链后面的policy为ACCEPT,表示若通过所有的规则都不匹配,则为默认action accept。 接下来将通过几个demo实例演示怎么使用Filter表。 注意: 本文实验使用的是本机虚拟机,其中宿主机地址为192.168.56.1,虚拟机地址为192.168.56.2,在实验中会涉及丢弃192.168.56.1的数据包,如果您连接的是远程云主机,将导致和远程主机断开连接。 以下每个步骤,除非特别说明,下一个步骤执行前,务必清空上一个步骤的规则:sudo iptables -F 首先看一个简单的例子,把192.168.56.1加入黑名单禁止其访问: sudo iptables -A INPUT -i eth1 -s 192.168.56.1 -j DROP 例子中-A表示追加规则,INPUT是链名,-i指定网卡,-s指定源IP地址,-j指定action,这里为DROP,即丢弃包。 此时192.168.56.1这个ip不能和主机通信了,ssh会立即掉线,只能通过vnc连接了! -s不仅能够指定IP地址,还可以指定网络地址,使用-p指定协议类型,比如我们需要丢掉所有来自192.168.56.0/24这个网络地址的ICMP包,即不允许ping: sudo iptables -A INPUT -s 192.168.56.0/24 -i eth1 -p icmp -j DROP 输出结果: ~ nc -z 192.168.56.2 22 Connection to 192.168.56.2 port 22 [tcp/ssh] succeeded! ~ ping 192.168.56.2 PING 192.168.56.2 (192.168.56.2): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 ^C --- 192.168.56.2 ping statistics --- 3 packets transmitted, 0 packets received, 100.0% packet loss 我们发现能够通过nc连接主机,但ping不通。 我们还可以通过--dport指定目标端口,比如不允许192.168.56.1这个主机ssh连接(不允许访问22端口): sudo iptables -A INPUT -s 192.168.56.1 -p tcp --dport 22 -i eth1 -j DROP 注意:使用--dport或者--sport必须同时使用-p指定协议类型,否则无效! 以上把192.168.56.1打入了ssh黑名单,此时能够ping通主机,但无法通过ssh连接主机。 Filter表的介绍就到此为止,接下来看NAT表的实例。 2.NAT表 NAT表默认由以下三条链构成: PREROUTING:在进行路由判断前所要进行的规则(DNAT/Redirect) POSTROUTING: 在进行路由判断之后要进行的规则(SNAT/MASQUERADE) OUTPUT: 与发送的数据包有关根据需要修改的是源IP地址还是目标IP地址,NAT可以分为两种: DNAT:需要修改目标地址(IP或者端口),使用场景为从外网来的数据包需要映射到内部的一个私有IP,比如46.64.22.33->192.168.56.1。显然作用在PREROUTING。 SNAT:需要修改源地址(IP或者端口),使用场景和DNAT相反,内部私有IP需要发数据包出去,必须首先映射成公有IP,比如192.168.56.1->46.64.22.33。显然作用在POSTROUTING。首先实现介绍一个简单的demo,端口转发,我们把所有来自2222的tcp请求转发到本机的22端口,显然需要修改目标地址,因此属于DNAT: sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-ports 22 此时在192.168.56.1上使用ssh连接,指定端口为2222: ssh fgp@192.168.56.2 -p 2222 我们能够顺利登录,说明端口转发成功。 另一个例子是使用双网卡linux系统作为路由器,我们有一台服务器controller有两个网卡: eth0: 192.168.1.102 # 可以通外网 eth1: 192.168.56.2 # 不可以通外网,用作网关接口。 另外一台服务器node1只有一个网卡eth1,IP地址为192.168.56.3,不能通外网。我们设置默认路由为controller机器的eth1: sudo route add default gw 192.168.56.2 dev eth1 此时路由表信息为: fgp@node1:~$ sudo route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.56.2 0.0.0.0 UG 0 0 0 eth1 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 由路由表可知,node1上的数据包会发送到网关192.168.56.2,即controller节点. 接下来我们要在服务器controller上配置NAT,我们需要实现192.168.56.0/24的IP都转发到eth0,显然是SNAT,修改的源地址为eth0 IP地址192.168.1.102: sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o eth0 -j SNAT --to-source 192.168.1.102 其中-t指定nat表,-A 指定链为POSTROUTING,-s 为源ip地址段,-o指定转发网卡,注意-j参数指定action为SNAT,并指定eth0 IP地址(注意eth0可能配置多个ip地址,因此必须指定--to-source)。 此时在node1机器上检测网络连通性: fgp@node1:~$ pingbaidu.com-c 2 PING baidu.com (180.149.132.47) 56(84) bytes of data. 64 bytes from 180.149.132.47: icmp_seq=1 ttl=48 time=7.94 ms 64 bytes from 180.149.132.47: icmp_seq=2 ttl=48 time=6.32 ms --- baidu.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 6.328/7.137/7.946/0.809 ms node1能够正常上网。 以上通过使用controller的网卡eth0作为路由实现了node1的上网,但同时有一个问题存在,我们在指定SNAT时必须手动指定IP,如果eth0 IP地址变化了,必须修改iptables规则。显然这样很难维护,我们可以通过MASQUERADE实现动态SNAT,不需要指定IP地址: sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o eth0 -j MASQUERADE 其他 使用iptables-save能够导出规则,使用iptables-restore能够从文件中导入规则。 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连接查看: fgp@controller:~/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

关于Linux网络工具大全及使用指南和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

用户评论

有些人,只适合好奇~

终于找到一个总结Linux常用网络工具的帖子!学习linux网优真是太重要了

    有9位网友表示赞同!

心已麻木i

我一直在摸索Linux下的网络工具,这篇文章一定要认真看一遍!

    有8位网友表示赞同!

命该如此

哪些工具是必会的?分享一下你的宝贵经验吧!

    有18位网友表示赞同!

拥菢过后只剰凄凉

最近在准备考网优证书,这种总结帖子很实用!

    有15位网友表示赞同!

有阳光还感觉冷

希望这篇文章能涵盖很多常用工具,比如ping、traceroute等

    有16位网友表示赞同!

落花忆梦

linux下调试网络问题真的很不容易,这些工具太需要了!

    有11位网友表示赞同!

微信名字

感觉学习linux的网络工具比windows用起来复杂多了,不过还是很有用的

    有15位网友表示赞同!

裸睡の鱼

分享一下你最常使用的Linux网络工具吧!

    有5位网友表示赞同!

烬陌袅

学习一下这些工具说不定以后帮上大忙呢!

    有13位网友表示赞同!

肆忌

这篇文章是不是比较适合入门Linux系统的人?

    有18位网友表示赞同!

一笑抵千言

希望作者能把工具的使用方法和例子都写清楚,方便理解。

    有5位网友表示赞同!

娇眉恨

我感觉网络工具总是在更新换代,所以这个总结很有意义

    有18位网友表示赞同!

断秋风

学习新东西真是刺激啊!期待了解更多linux网络知识!

    有18位网友表示赞同!

墨染天下

有没有哪些小技巧可以用到Linux网络工具中?

    有9位网友表示赞同!

伱德柔情是我的痛。

我想知道这些工具具体怎么用在实际的网络调试过程中?

    有11位网友表示赞同!

滴在键盘上的泪

看到这个标题,我就想起自己以前学习Linux的时候那些工具...

    有11位网友表示赞同!

桃洛憬

学习linux网优是一个循序渐进的过程,需要不断练习和总结!

    有16位网友表示赞同!

恰十年

期待作者能分享更多关于Linux系统管理的小知识!

    有20位网友表示赞同!

【Linux网络工具大全及使用指南】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:《红尘纷扰,文人笔下千般愁:诗教探微之旅》 下一篇:深度探讨:人际关系的纽带——友谊的内涵与价值