先从作业的要求出发,学习几个常用的网络指令

  • 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
2
3
4
5
6
7
8
9
10

选项:
-d 不将地址解析成主机名。
-h maximum_hops 搜索目标的最大跃点数。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout 等待每个回复的超时时间(以毫秒为单位)。
-R 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr 要使用的源地址(仅适用于 IPv6)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。

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
2
3
4
5
6
7
服务器:  UnKnown
Address: 192.0.0.33

非权威应答:
名称: baidu.com
Addresses: 220.181.7.203
39.156.70.37

这个指令的作用是查询域名使用的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
2
3
4
5
6
7
8
9
10
11
12
13
14
活动连接
?:本机地址

协议 本地地址 外部地址 状态
TCP ?:49422 4.145.79.81:https ESTABLISHED
TCP ?:51477 ec2-54-204-130-113:https CLOSE_WAIT
TCP ?:51791 157.255.13.41:https CLOSE_WAIT
TCP ?:51815 157.148.63.240:14000 ESTABLISHED
TCP ?:53853 60.249.87.139:https ESTABLISHED
TCP ?:53854 60.249.87.139:https ESTABLISHED
TCP ?:53855 211.72.235.82:https ESTABLISHED
TCP ?:53856 203.198.11.74:https ESTABLISHED
TCP ?:53858 220.130.58.148:https ESTABLISHED
TCP ?:53859 211.20.52.91:https ESTABLISHED

这个指令的作用是获取本机的已经建立的网络连接

数据意义:协议,显然就是这个连接使用的协议;本机地址,包括使用的端口号;外部地址,对方(远程主机)的 IP 地址 + 端口号;最后一个是状态,这里只有CLOSE_WAIT和ESTABLISHED

状态 说明
ESTABLISHED 连接已建立,正在通信
CLOSE_WAIT 等待关闭(对方已关闭)
TIME_WAIT 等待系统清理连接
LISTENING 正在监听端口(只有加 -a 才会显示)
SYN_SENT / SYN_RECEIVED 正在建立连接阶段

实现原理:应该是查询本机的一个网络连接表,通过调用api,获得已经连接的网络信息,展示出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-a            显示所有连接和侦听端口。
-b 显示在创建每个连接或侦听端口时涉及的
可执行文件。在某些情况下,已知可执行文件托管
多个独立的组件,此时会
显示创建连接或侦听端口时
涉及的组件序列。在此情况下,可执行文件的
名称位于底部 [] 中,它调用的组件位于顶部,
直至达到 TCP/IP。注意,此选项
可能很耗时,并且可能因为你没有足够的
权限而失败。
-e 显示以太网统计信息。此选项可以与 -s 选项
结合使用。
-f 显示外部地址的完全限定
域名(FQDN)。
-i 显示 TCP 连接在当前状态所花费的时间。
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
-p proto 显示 proto 指定的协议的连接;proto
可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q 显示所有连接、侦听端口和绑定的
非侦听 TCP 端口。绑定的非侦听端口
不一定与活动连接相关联。
-r 显示路由表。
-s 显示每个协议的统计信息。默认情况下,
显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
-p 选项可用于指定默认的子网。
-t 显示当前连接卸载状态。
-x 显示 NetworkDirect 连接、侦听器和共享
终结点。
-y 显示所有连接的 TCP 连接模板。
无法与其他选项结合使用。
interval 重新显示选定的统计信息,各个显示间暂停的
间隔秒数。按 CTRL+C 停止重新显示
统计信息。如果省略,则 netstat 将打印当前的
配置信息一次。

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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
以太网 2:
节点 IP 址址: [?] 范围 ID: []

NetBIOS 本地名称表

名称 类型 状态
---------------------------------------------
LAPTOP-4PVCJMSS<20> 唯一 已注册
LAPTOP-4PVCJMSS<00> 唯一 已注册
WORKGROUP <00> 组 已注册

本地连接:
节点 IP 址址: [0.0.0.0] 范围 ID: []

缓存中没有名称

本地连接 2:
节点 IP 址址: [0.0.0.0] 范围 ID: []

缓存中没有名称

WLAN:
节点 IP 址址: [?] 范围 ID: []

NetBIOS 本地名称表

名称 类型 状态
---------------------------------------------
LAPTOP-4PVCJMSS<20> 唯一 已注册
LAPTOP-4PVCJMSS<00> 唯一 已注册
WORKGROUP <00> 组 已注册

本地连接* 1:
节点 IP 址址: [0.0.0.0] 范围 ID: []

缓存中没有名称

本地连接* 2:
节点 IP 址址: [0.0.0.0] 范围 ID: []

缓存中没有名称

数据含义:它列出了本地所有适配器及其NetBIOS注册表。拿WLAN举例

名称<20>表示远程文件/打印共享服务; <00> 表示主机名称(唯一名称);WORKGROUP 表示局域网组名(组名称)

类型:唯一(Unique) 表示该名称唯一绑定到本机 ;组(Group)表示共享的组名

状态:已注册(Registered) 表示名称已经向 NetBIOS 注册成功,可以在局域网中被其他电脑识别

实现原理:依旧读取本地数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-a   (适配器状态)    列出指定名称的远程机器的名称表
-A (适配器状态) 列出指定 IP 地址的远程机器的名称表。
-c (缓存) 列出远程[计算机]名称及其 IP 地址的 NBT 缓存
-n (名称) 列出本地 NetBIOS 名称。
-r (已解析) 列出通过广播和经由 WINS 解析的名称
-R (重新加载) 清除和重新加载远程缓存名称表
-S (会话) 列出具有目标 IP 地址的会话表
-s (会话) 列出将目标 IP 地址转换成计算机 NETBIOS 名称的会话表。
-RR (释放刷新) 将名称释放包发送到 WINS,然后启动刷新

RemoteName 远程主机计算机名。
IP address 用点分隔的十进制表示的 IP 地址。
interval 重新显示选定的统计、每次显示之间暂停的间隔秒数。
按 Ctrl+C 停止重新显示统计。

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
2
3
4
5
6
7
8
9
10
接口: 192.168.56.1 --- 0x4
Internet 地址 物理地址 类型
192.168.56.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 01-00-5e-00-00-02 静态
224.0.0.22 01-00-5e-00-00-16 静态
接口: 10.69.91.78 --- 0xe
Internet 地址 物理地址 类型
10.69.55.127 58-69-6c-91-0e-ba 动态
10.69.68.176 dc-97-ba-77-07-7c 动态
10.69.89.33 6c-f6-da-3d-0b-e4 动态

数据意义:Internet地址就是Ip地址,物理地址就是对应的MAC地址,类型有静态和动态。静态表示手动用arp添加,动态表示是自动添加的。

实现原理:获取本机数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-a            通过询问当前协议数据,显示当前 ARP 项。
如果指定 inet_addr,则只显示指定计算机
的 IP 地址和物理地址。如果不止一个网络
接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项
和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可
以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr
与物理地址 eth_addr 相关联。物理地址是用
连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口
的 Internet 地址。如果不存在,则使用第一
个适用的接口。

route

操作网络路由表。

ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]

输入route print,输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
===========================================================================
接口列表
4...0a 00 27 00 00 04 ......VirtualBox Host-Only Ethernet Adapter
10...00 ff 66 d0 4f f5 ......Sangfor aTrust VNIC
18...00 ff d0 5d 88 ef ......QMTAP Adapter V9
22...c2 35 32 5a cf 57 ......Microsoft Wi-Fi Direct Virtual Adapter
5...e2 35 32 5a cf 57 ......Microsoft Wi-Fi Direct Virtual Adapter #2
14...c0 35 32 5a cf 57 ......Realtek RTL8852BE WiFi 6 802.11ax PCIe Adapter
1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 10.69.255.254 10.69.91.78 35
10.69.0.0 255.255.0.0 在链路上 10.69.91.78 291
===========================================================================
永久路由:


IPv6 路由表
===========================================================================
活动路由:
接口跃点数网络目标 网关
1 331 ::1/128 在链路上
4 281 fe80::/64 在链路上
4 281 fe80::2d77:216:586:a08f/128
在链路上
1 331 ff00::/8 在链路上
4 281 ff00::/8 在链路上
===========================================================================
永久路由:

数据意义:接口列表似乎是我现在在使用的应用连接的网络信息。接下来是Ipv4和Ipv6路由表。网络目标表示数据包要到达的目标 IP 或网段,网络掩码 用来匹配目标 IP 的子网掩码,网关表示下一跳 IP,如果是“在链路上”,表示直接可达,无需通过网关;接口表示使用哪个本机网卡发送数据(对应接口列表编号或 IP);跃点数(Metric)表示优先级,越小优先级越高,路由选择依据。

实现原理:route 通过操作系统 API 读取和修改内核路由表,内核发送数据包时根据路由表选择出口接口和网关,实现 IP 数据包的正确传输。

tcpdump

1
2
3
4
5
6
7
8
9
-i <interface>:指定网卡(`-i any` 抓所有接口)
-w <file>:写入 pcap 文件(二进制),供 Wireshark 使用
-r <file>:读取 pcap 文件
-n:不做 DNS 反解析(更快,输出中显示 IP)
-nn:既不做 DNS,也不将端口号翻译为服务名(显示数字端口)
-A:以 ASCII 显示包内容(便于查看 HTTP 明文)
-X:以十六进制+ASCII 显示包内容(更详细)
-c <count>:抓到 N 个包后退出
-s <snaplen>:设置抓包长度(默认可能截断,使用 `-s 0` 捕获完整包)

实现原理:tcpdump并不直接“抓包”,它通过 libpcap 与操作系统内核协作,把网卡收到的原始帧通过高效通道交给用户态程序,并且把用户给的过滤规则(BPF)下推到内核,只有匹配的数据包才传过来,最后 tcpdump 解析并显示或写入 pcap 文件。