网络操作
1. 网络连通性
ping
windows上也有此命令。
ping 命令是用来测试 TCP/IP 网络是否畅通或者测试网络连接速度的命令,对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping就是一个测试程序,如果ping运行正确,大体上就可以排除网络访问层、网卡、Modem的输入输出线路、电缆和路由器等存在的故障,从而缩小问题的范围。
ping 命令的原理是根据计算机唯一标示的 IP 地址,当用户给目的地址发送一个数据包时,对方就会返回一个同样大小的数据包,根据返回的数据包用户可以确定目的主机的存在,并初步判断目的主机的操作系统。
ping 命令的语法:
ping <option> hostname_or_ip
参数 | 含义 |
---|---|
-c | 设置完成要求回应的次数 |
-i | 指定收发信息的间隔时间 |
-s | 设置数据包的大小 |
-w | 在设定的秒后退出 |
telnet
windows上也有此命令。
telnet 命令通过 telnet 协议连接目标主机,对远程主机进行管理。不过,对于管理远程主机这项职能,telnet 因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的 ssh 方式了。
telnet
命令的语法格式为:
telnet hostname port
如果 telnet 连接可以在某一端口上完成即代表着两台主机间的连接良好,这通常用来测试主机是否在线或者网络是否正常。
2. 硬件配置
ifconfig
题外话,
ip
命令和ifconfig
类似,但前者功能更强大,并旨在取代后者。ifconfig
是 net-tools 中已被废弃使用的一个命令,许多年前就已经没有维护了。
ifconfig
命令用于配置和显示 Linux 中网络设备的接口参数,来源于 net-tools 工具包。
命令示例 | 作用 |
---|---|
ifconfig | 显示网络设备信息 |
ifconfig eth0 up/down | 启动关闭指定网卡 |
ifconfig eth0 mtu 1500 | 设置最大传输单元 |
ifconfig ens33 192.168.10.20/24 | 临时修改 IP |
ifconfig ens33:0 192.168.10.21 ifconfig ens33:1 192.168.10.22 | 建立虚拟网卡(网卡别名),流量走主网卡 |
ifconfig eth0 | 单独显示某网卡 |
ethtool
ethtool
允许你查看和更改网卡的许多设置(不包括 Wi-Fi 网卡),借此你可以管理许多高级设置,包括 tx/rx、校验及网络唤醒功能。
如下是一些你可能感兴趣的基本命令:
命令 | 作用 |
---|---|
ethtool -i | 显示一个特定网卡的驱动信息,检查软件兼容性时尤其有用 |
ethtool -p | 启动一个适配器的指定行为,比如让适配器的 LED 灯闪烁,以帮助你在多个适配器或接口中标识接口名称 |
ethtool -s | 显示网络统计信息 |
ethtool speed <10\100\1000> | 设置适配器的连接速度,单位是 Mbps |
iwconfig
iwconfig 工具与 ifconfig 和 ethtool 类似,是用于无线网卡的。
3. 路由及DNS查询
hostname
此命令用来查看或设置当前的主机名。
命令 | 作用 |
---|---|
hostname | 显示主机名字 |
hostname -d | 显示机器所属域名 |
hostname -f | 显示完整的主机名和域名 |
hostname -i | 显示当前机器的 ip 地址 |
... | ...... |
route
route
命令用来显示并设置 Linux 内核中的网络路由表,route
命令设置的路由主要是静态路由。
要注意的是,直接在命令行下执行
route
命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在*/etc/rc.local
中添加route
命令来保证该路由设置永久有效。
traceroute
windows下的类似命令
tracert
。
traceroute
命令用于追踪数据包在网络上传输时的路径。通过 traceroute
我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径,当然每次数据包由某一同样的出发点到达某一同样的目的地走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute
通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间,一条路径上的每个设备traceroute
要测3次。输出结果中包括每次测试的时间(ms)、设备的名称(如有的话)、IP地址。
traceroute
命令的格式为:
traceroute host
host
host
命令是常用的 DNS 域名查询工具。通常可以用来转换域名和IP地址,其语法格式为:
host hostname
基本使用示例:
$ host chua-n.com
chua-n.com is an alias for www.chua-n.com.
www.chua-n.com is an alias for chua-n.github.io.
chua-n.github.io has address 185.199.111.153
chua-n.github.io has address 185.199.110.153
chua-n.github.io has address 185.199.109.153
chua-n.github.io has address 185.199.108.153
chua-n.github.io has IPv6 address 2606:50c0:8001::153
chua-n.github.io has IPv6 address 2606:50c0:8003::153
chua-n.github.io has IPv6 address 2606:50c0:8000::153
chua-n.github.io has IPv6 address 2606:50c0:8002::153
$ host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
$ host 127.0.0.1
1.0.0.127.in-addr.arpa domain name pointer RedmiBook-2021.
nslookup
此命令在windows下也能使用。
nslookup
类似于host
命令用来做域名解析,不过可以通过交互式的方式:
$ nslookup
> baidu.com
Server: 172.31.224.1
Address: 172.31.224.1#53
Non-authoritative answer:
Name: baidu.com
Address: 110.242.68.66
Name: baidu.com
Address: 39.156.66.10
Name: ns7.baidu.com
Address: 180.76.76.92
Name: ns2.baidu.com
Address: 220.181.33.31
Name: dns.baidu.com
Address: 110.242.68.134
Name: ns4.baidu.com
Address: 14.215.178.80
Name: ns4.baidu.com
Address: 111.45.3.226
Name: ns3.baidu.com
Address: 112.80.248.64
Name: ns3.baidu.com
Address: 36.152.45.193
Name: ns7.baidu.com
Address: 240e:940:603:4:0:ff:b01b:589a
Name: ns7.baidu.com
Address: 240e:bf:b801:1002:0:ff:b024:26de
> chua-n.com
Server: 172.31.224.1
Address: 172.31.224.1#53
Non-authoritative answer:
chua-n.com canonical name = www.chua-n.com.
www.chua-n.com canonical name = chua-n.github.io.
Name: chua-n.github.io
Address: 185.199.110.153
Name: chua-n.github.io
Address: 185.199.111.153
Name: chua-n.github.io
Address: 185.199.108.153
Name: chua-n.github.io
Address: 185.199.109.153
Name: dns3.p05.nsone.net
Address: 198.51.44.69
Name: ns-1622.awsdns-10.co.uk
Address: 205.251.198.86
Name: dns1.p05.nsone.net
Address: 198.51.44.5
Name: dns2.p05.nsone.net
Address: 198.51.45.5
Name: ns-692.awsdns-22.net
Address: 205.251.194.180
Name: dns3.p05.nsone.net
Address: 2620:4d:4000:6259:7:5:0:3
Name: ns-1622.awsdns-10.co.uk
Address: 2600:9000:5306:5600::1
Name: dns1.p05.nsone.net
Address: 2620:4d:4000:6259:7:5:0:1
Name: dns2.p05.nsone.net
Address: 2a00:edc0:6259:7:5::2
Name: ns-692.awsdns-22.net
Address: 2600:9000:5302:b400::1
Name: chua-n.github.io
Address: 2606:50c0:8001::153
Name: chua-n.github.io
Address: 2606:50c0:8003::153
Name: chua-n.github.io
Address: 2606:50c0:8000::153
Name: chua-n.github.io
Address: 2606:50c0:8002::153
>
4. 网络请求/抓包
curl
curl
命令是客户端(client) URL 工具的意思,用来与服务器之间传输数据。可以将其理解为命令行访问URL的工具,可以发出网络请求,然后得到和提取数据,显示在标准输出上面。curl
的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
其语法格式为:
curl <options> URL
使用示例:
curl www.baidu.com
:直接发送命令就是发送 GET 请求$ curl www.baidu.com <!DOCTYPE html> <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
其他各种参数归类可见:Linux curl命令详解
tcpdump
tcpdump
命令是一款抓取数据包的工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w
选项将数据包保存到文件中,方便以后分析。
5. netstat
netstat
命令用来打印Linux中网络系统的状态信息,如网络连接状态、路由表、接口统计等。来自于 net-tools 工具包,ss
是 netstat
的升级版。
参数 | 作用 |
---|---|
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 |
-l | 显示处于监听状态的网络连接及端口信息 |
-t | 查看TCP协议相关的信息 |
-u | 查看UDP协议相关的信息 |
-r | 显示路由表信息 |
-i | 显示网卡列表 |
-g | 显示组播组的关系 |
-s | 显示网络统计信息 |
常用命令选项:
-anpt
-anpu
-anptu
-anpltu
-ntlp
6. nmap
nmap
指Network Mapper,作用是在远程机器上探测网络、执行安全扫描、网络审计和搜寻开放端口。nmap
会扫描远程在线主机,获取该主机的操作系统、包过滤器、开放的端口等。
现在大部分Linux的发行版本像Red Hat,CentOS,Fedoro,Debian和Ubuntu中都自带了Nmap,如果需要自行安装的话,如下即可:
# yum install nmap # [on Red Hat based systems]
$ apt install nmap # [on Debian based systems]
nmap
的命令语法:
nmap [Scan Type(s)] [Options] {target specification}
options | 作用 |
---|---|
-P | 指定想要扫描的端口(默认情况下nmap 只扫描TCP端口) |
-v | 做更详细的扫描输出 |
--exclude | 扫描时排除某些主机 |
-O | 开启操作系统检测 |
-A | 开启操作系统检测、版本检测、脚本扫描、路由追踪功能 |
... | 太多了,直接看帮助文档吧 |
nmap
的功能特别强大,可用选项参数很多,下面根据如下两台机器的配置,介绍一下其基本的使用——扫描特定主机名/IP(可以同时扫描多个机器:①以空格分隔即可;②可以用*
作为通配符;③可以指定IP范围)
IP | 域名 |
---|---|
192.168.0.100 | server1.tecmint.com |
192.168.0.101 | server2.tecmint.com |
nmap server2.tecmint.com
:指定域名nmap 192.168.0.101
:指定IPnmap 192.168.0.101 192.168.0.102 192.168.0.103
:空格分隔多个IP来扫描多个机器nmap 192.168.0.*
:通配符扫描多个机器nmap 192.168.0.101-110
: 指定IP范围扫描多个机器[root@server1 ~]# nmap 192.168.0.101 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-11-18 11:04 EST Interesting ports on server2.tecmint.com (192.168.0.101): Not shown: 1674 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 958/tcp open unknown 3306/tcp open mysql 8888/tcp open sun-answerbook MAC Address: 08:00:27:D9:8E:D7 (Cadmus Computer Systems) Nmap finished: 1 IP address (1 host up) scanned in 0.465 seconds You have new mail in /var/spool/mail/root
7. 防火墙
开放端口:
firewall-cmd --zone=public --add-port=18227/tcp --permanent firewall-cmd --reload
查询当前开放的端口:
firewall-cmd --list-ports
8. 上传/下载
wget
wget
是一个从网络上下载文件的工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。
其语法格式为:wget <option> URL
选项 | 作用 |
---|---|
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
scp
scp
是 secure copy的缩写, 是 Linux 系统下基于ssh
登陆进行安全的远程文件拷贝命令,用于在 Linux 服务器之间复制文件和目录。
scp
传输是加密的,可能会稍微影响一下速度。但是scp
非常不占资源,不会提高多少系统负荷,在这一点上,rsync
就远远不及它了。虽然 rsync
比scp
会快一点,但当小文件众多的情况下,rsync
会导致硬盘I/O非常高,而scp
基本不影响系统正常使用。
语法参数:
scp <option> srcPath tgtPath
rsync
rsync
是一个高效、功能强大的远程(或本地)文件复制传输工具。它在操作上和 scp
有点类似,但比 scp
强大的多,rsync
支持断点续传。
使用方式(具体看帮助文档吧):
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rz/sz
通常,利用SSH连接远程Linux服务器时,经常需要与本地交互文件。当然,我们可以利用FTP方式,比如通过 Filezilla 客户端软件。不过直接使用SSH软件(如 SecureCRT、Xshell)自带的上传和下载功能无疑更为方便。通常这些SSH软件支持的文件传输协议有ASCII、Xmodem、Zmodem等。rz
与 sz
便是Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具。
要使用这两个命令,需要如下两个前提:
- 首先,你的 Linux 服务端需要安装 rz/sz 命令,也就是 lszrz 包,例如 Ubuntu 下运行
apt install lrzsz
; - 其次,你的 Windows 客户端需要使用支持 ZModem 的 telnet/ssh 客户端(Xshell、SecureCRT支持,PuTTY貌似不支持)。
上传/下载命令介绍:
rz
命令(Receive Zmodem),将本地文件批量上传到远程Linux/Unix服务器,注意不能上传文件夹。sz
命令(Send Zmodem),将多个文件从远程服务器下载到本地,注意不能下载文件夹。
9. 文件传输协议
文件传输是数据交换的主要形式。在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议。这个协议包括了文件的识别、传送的起止时间、错误的判断与纠正等内容。
常见的传输协议有以下几种:
ASCII:这是最快的传输协议,但只能传送文本文件。
Xmodem:这种古老的传输协议速度较慢,但由于使用了CRC错误侦测方法,传输的准确率可高达99.6%。
Ymodem:这是Xmodem的改良版,使用了1024位区段传送,速度比Xmodem要快
Zmodem:Zmodem采用了串流式(streaming)传输方式,传输速度较快,而且还具有自动改变区段大小和断点续传、快速错误侦测等功能。
Zmodem 是目前最流行的文件传输协议。