先从作业的要求出发,学习几个常用的网络指令
- tracert(Windows)和traceroute(Linux)
- ipconfig(Windows)和ifconfig(Linux)
- nslookup
- netstat
- nbtstat
- arp
- route
- tcpdump(Linux)抓包工具
各个命令,在你电脑执行时,解释输出的结果中各个数据值的意义,解释每个命令的功能,解释该命令编写的程序的可能技术原理。
tracert
用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
[-R] [-S srcaddr] [-4] [-6] target_name
tracert的主要用法是查找目标主机到自己主机经过的路由及其延迟情况,当我们输入tracert huaziqi.top
,他会返回:
通过最多 30 个跃点跟踪
到 huaziqi.top [185.199.111.153] 的路由:1 2 ms 4 ms 6 ms 10.69.255.254
2 3 ms 2 ms 2 ms 172.28.254.2
3 3 ms 3 ms 4 ms 10.1.65.21
4 * * * 请求超时。
5 * * * 请求超时。
6 * * * 请求超时。
7 * 32 ms * 219.158.30.30
8 30 ms 30 ms 31 ms 219.158.8.174
9 * 82 ms 79 ms ae-11.a02.tokyjp08.jp.bb.gin.ntt.net [129.250.66.120]
10 201 ms 206 ms 204 ms ae-1.fastly.tokyjp08.jp.bb.gin.ntt.net [61.200.82.50]
11 85 ms * * cdn-185-199-111-153.github.com [185.199.111.153]
12 * 83 ms 82 ms cdn-185-199-111-153.github.com [185.199.111.153]跟踪完成。
数据值意义:每行数据包括四个具体数据,前三个时间表示的是向这个路由器发送三次ICMP回显请求的响应时间,第四个地址数据表示路由器的IP地址。
实现原理:每次发送数据增加IP数据包中TTL的值,从而诱使每个中转路由返回 ICMP 超时响应,从而推断出路径。
1 |
|
ipconfig
用法:
ipconfig [/allcompartments] [/? | /all |
/renew [adapter] | /release [adapter] |
/renew6 [adapter] | /release6 [adapter] |
/flushdns | /displaydns | /registerdns |
/showclassid adapter |
/setclassid adapter [classid] |
/showclassid6 adapter |
/setclassid6 adapter [classid] ]
ipconfig的作用是获取自己电脑上的ip地址,DNS服务器信息,子网掩码,默认网关等信息。
使用之后,它会将电脑上所有网络适配器的相关信息列出
数据意义:很明显就是每个适配器的ip地址,DNS服务器信息,子网掩码,默认网关信息
实现原理:应该就是调用获取本地网络信息的api,然后展示出来
Windows IP 配置
以太网适配器 以太网 2:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : 。。。。。
IPv4 地址 . . . . . . . . . . . . : 。。。。。。
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :未知适配器 本地连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :未知适配器 本地连接 2:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :无线局域网适配器 本地连接* 1:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :无线局域网适配器 本地连接* 2:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : 。。。。。。
子网掩码 . . . . . . . . . . . . : 255.255.0.0
默认网关. . . . . . . . . . . . . : 。。。。。。
选项:
/? 显示此帮助消息
/all 显示完整配置信息。
/release 释放指定适配器的 IPv4 地址。
/release6 释放指定适配器的 IPv6 地址。
/renew 更新指定适配器的 IPv4 地址。
/renew6 更新指定适配器的 IPv6 地址。
/flushdns 清除 DNS 解析程序缓存。
/registerdns 刷新所有 DHCP 租用并重新注册 DNS 名称
/displaydns 显示 DNS 解析程序缓存的内容。
/showclassid 显示适配器允许的所有 DHCP 类 ID。
/setclassid 修改 DHCP 类 ID。
/showclassid6 显示适配器允许的所有 IPv6 DHCP 类 ID。
/setclassid6 修改 IPv6 DHCP 类 ID。
nslookup
用法:
nslookup [-opt …] # 使用默认服务器的交互模式
nslookup [-opt …] - server # 使用 “server” 的交互模式
nslookup [-opt …] host # 仅查找使用默认服务器的 “host”
nslookup [-opt …] host server # 仅查找使用 “server” 的 “host”
输入nslookup baidu.com
,他会返回:
1 | 服务器: UnKnown |
这个指令的作用是查询域名使用的DNS服务器以及它的域名
数据意义:服务器Unknow,表示它希望通过DNS服务器的IP地址逆向出它的域名失败。下面的Address表示当前使用的DNS服务器的IP地址。接下来”非权威应答“,表示这个ip地址存储在缓存中,可能不是最新的。下面的“名称”就是域名,再下面的”Addresses”就是这个域名所使用的IP地址。
实现原理:就是用自己的电脑当前使用的DNS服务器询问这个网址的IP地址,然后这些信息就有了。
netstat
NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]
直接输入netstat
:
1 | 活动连接 |
这个指令的作用是获取本机的已经建立的网络连接
数据意义:协议,显然就是这个连接使用的协议;本机地址,包括使用的端口号;外部地址,对方(远程主机)的 IP 地址 + 端口号;最后一个是状态,这里只有CLOSE_WAIT和ESTABLISHED
状态 | 说明 |
---|---|
ESTABLISHED | 连接已建立,正在通信 |
CLOSE_WAIT | 等待关闭(对方已关闭) |
TIME_WAIT | 等待系统清理连接 |
LISTENING | 正在监听端口(只有加 -a 才会显示) |
SYN_SENT / SYN_RECEIVED | 正在建立连接阶段 |
实现原理:应该是查询本机的一个网络连接表,通过调用api,获得已经连接的网络信息,展示出来
1 | -a 显示所有连接和侦听端口。 |
nbtstat
显示协议统计和当前使用 NBI 的 TCP/IP 连接
(在 TCP/IP 上的 NetBIOS)。
NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n]
[-r] [-R] [-RR] [-s] [-S] [interval] ]
输入nbtstat n
,返回:
1 | 以太网 2: |
数据含义:它列出了本地所有适配器及其NetBIOS注册表。拿WLAN举例
名称:<20>
表示远程文件/打印共享服务; <00>
表示主机名称(唯一名称);WORKGROUP
表示局域网组名(组名称)
类型:唯一(Unique) 表示该名称唯一绑定到本机 ;组(Group)表示共享的组名
状态:已注册(Registered) 表示名称已经向 NetBIOS 注册成功,可以在局域网中被其他电脑识别
实现原理:依旧读取本地数据。
1 | -a (适配器状态) 列出指定名称的远程机器的名称表 |
arp
显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]
输入arp -a
可以获取使用的ip地址对应了哪些MAC地址。部分输出:
1 | 接口: 192.168.56.1 --- 0x4 |
数据意义:Internet地址就是Ip地址,物理地址就是对应的MAC地址,类型有静态和动态。静态表示手动用arp添加,动态表示是自动添加的。
实现原理:获取本机数据
1 | -a 通过询问当前协议数据,显示当前 ARP 项。 |
route
操作网络路由表。
ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
输入route print
,输出
1 | =========================================================================== |
数据意义:接口列表似乎是我现在在使用的应用连接的网络信息。接下来是Ipv4和Ipv6路由表。网络目标表示数据包要到达的目标 IP 或网段,网络掩码 用来匹配目标 IP 的子网掩码,网关表示下一跳 IP,如果是“在链路上”,表示直接可达,无需通过网关;接口表示使用哪个本机网卡发送数据(对应接口列表编号或 IP);跃点数(Metric)表示优先级,越小优先级越高,路由选择依据。
实现原理:route 通过操作系统 API 读取和修改内核路由表,内核发送数据包时根据路由表选择出口接口和网关,实现 IP 数据包的正确传输。
tcpdump
1 | -i <interface>:指定网卡(`-i any` 抓所有接口) |
实现原理:tcpdump并不直接“抓包”,它通过 libpcap 与操作系统内核协作,把网卡收到的原始帧通过高效通道交给用户态程序,并且把用户给的过滤规则(BPF)下推到内核,只有匹配的数据包才传过来,最后 tcpdump
解析并显示或写入 pcap 文件。