- ifconfig/ipconfig
- ping
- traceroute
- nslookup
- netstat
- hostname
- arp
- route
- ftp、tftp、telnet
- 实例:判断网络故障
- 实例:判断是否被墙
以下是一些系统自带的、常用的网络相关的命令。有趣的是,其中有很多命令是在 Windows、Linux 和 Mac 中通用的——用法基本相同。
ifconfig/ipconfig
ipconfig 是 Windows 的命令,ifconfig 是 Linux/Mac 的命令。
这两个命令可以查看本机网络配置(网卡数量、MAC 地址、IP 地址等)。
如果有 root 权限,ifconfig 命令可以控制网卡的开闭、更改本机 IP 和 MAC 地址等。但 Windows 的 ipconfig 只能查看不能修改。
在 Linux/Mac 系统中,网关需要用 route 命令查看。DNS 配置在 /etc/resolv.conf 文件中。而 Windows 的 ipconfig 会把这些信息都显示出来。
ping
ping 是一个非常常用的命令。判断一个主机(网站等)能否连通,只需拿 ping 命令试一下,例如:
ping www.baidu.com
ping 会不断尝试(Windows 系统只尝试四次,除非有相关参数),如果能够连通,会显示来自对方的回应(响应时间、TTL),否则显示错误信息。
如果连通而且响应时间不高,说明网络连接状况应该很好。如果出现错误,说明自己或对方的网络可能出现问题(网络故障、网络不稳定、运营商故意丢包、被墙等)。
此外 TTL 值可用于简单地分辨操作系统,如 Windows 的 TTL 大约在 100~130 之间,Unix/Linux 大约在 240~255 之间。
在 Linux/Mac 系统中,IPv6 的 ping 叫做 ping6,而 Windows 系统中则是 ping -6。
[% callout %] ping 不是万能的
主机或防火墙可以过滤 ping 流量,因此“ping 不通”不代表连接不上。同样,连接得上也不见得 ping 得通。
由于长城可以封锁指定端口,如 22、443,因此能 Ping 通国外 IP 也不代表一定能连接上。 [% endcallout %]
[% callout %] ping 不是武器
ICMP Flood 是一种攻击方式,但是操作系统自带的 ping 工具(以及相关 API)对发包能力做了限制——攻击效果就像挠痒痒一样。因此需要发动攻击的时候要使用其他工具。 [% endcallout %]
traceroute
备注:IPv6 的版本叫做 traceroute6,而在 Windows 系统中,IPv4 和 IPv6 都是 tracert。
traceroute 会追踪路上经过的所有路由器列表。通过尝试不同跳数,可以用来确定网络问题是发生在网关还是主机等。
注意,“* * *”不一定表示连不通,有可能是数据包被防火墙过滤了。
nslookup
nslookup 用于查询 DNS 记录。可用于查看域名解析是否正常是否被污染。
常见的用法有:
查询域名的 A 记录:
nslookup www.baidu.com
nslookup www.baidu.com 114.114.114.114
查询其他记录:
nslookup -qt=CNAME dl.google.com
查询缓存:
nslookup -d www.baidu.com
netstat
netstat 可以列出系统上所有的套接字连接情况,包括哪些处于监听状态。常用于查看端口监听和占用情况,例如查看 Apache 是否启动并进行监听。
例如:
netstat -a
:列出所有连接netstat -an
:禁止反向域名解析,提高查询速度。netstat -t
:只查看 TCP 连接(-u 是 UDP 连接)netstat -nl
:只列举监听中的连接- 查看哪个进程占用了端口:Linux 为
netstat -nlp
,Windows 为netstat -b
。
hostname
该命令可以查看和修改主机名。
不过在 Windows 系统中这个命令只能查看不能修改。
arp
arp 命令用于查看和修改本机 ARP 缓存。
route
route 命令用于查看和修改路由表。此命令在 Windows、Linux、Mac 用法各不相同。
以 Ubuntu 为例,如果未设置网关,可通过以下命令设置:
route add default gw 192.168.1.1
ftp、tftp、telnet
一些客户端而已。
实例:判断网络故障
- 检查网络连接是否正确。
ifconfig
、route
、cat /etc/resolv.conf
(Linux/Mac)或ipconfig
(Windows),观察 IP、网关、DNS 等配置是否正确。ping 114.114.114.114
,观察能否联网。traceroute 114.114.114.114
,如果无法联网,观察在哪个路由器处发生错误。nslookup www.baidu.com
,观察目标域名是否被正确解析。ping www.baidu.com
,观察目标是否能 ping 通。注意,ping 不通不代表连不通。curl -Iv https://www.baidu.com
(Windows 需要自己安装 curl),观察网站的访问过程,判断是否出现故障。
实例:判断是否被墙
总有人说“xxx被墙了”(或者“xxx能访问了”),但其他人却能正常使用(不能访问),所以在下结论之前,应该收集一些证据。
- 首先把所有翻墙工具关掉,屏蔽 hosts,以免得出错误结论。
- 刷新 DNS 缓存。Windows 用
ipconfig /flushdns
(需要管理员权限),Linux 用sudo /etc/init.d/nscd restart
,Mac 则是sudo dscacheutil -flushcache
。 - 充分条件:
curl -vI https://www.google.com
(Windows 需要自己安装 curl)
以下只是必要条件:
ping www.google.com
:最直接判断方法是 ping。- 如果处于教育网等环境,应同时测试
ping6 www.google.com
(Linux/Mac)或ping -6 www.google.com
(Windows),查看 IPv6 下的连接情况。 nslookup www.google.com
,观察 IP 解析结果是否正确。对于互联网大佬来说,往往一个域名可以解析出多个 IP,并且有 IPv6 地址。如果只是个简单的“159.106.121.75”(一个常用的污染 IP),说明可能被 DNS 污染了。- 到在线查询网站上查询所得的 IP 是否为目标网站的 IP。
- 如果 IP 正确,不妨多 ping 几次,并使用 traceroute 跟踪,查看是否有掉包的情况。
由于很多大佬都采用了多播技术,这就意味着,只要有一个 IP 好使,服务就能使用。可以在支持英文搜索的搜索引擎上寻找“online nslookup”,找到可用 IP。