198.18.0.2 是什么?

查看 461|回复 8
作者:FaiChou   
某些软件可以建立虚拟网络接口,在 macOS 上执行 ifconfig 可以看到 utun10,其 ip 地址是 198.18.0.1,Wi-Fi 的 dns 设置也被更改成 198.18.0.2.
但是 198.18.0.2 是什么?它并不是本机某网口的地址。
越研究发现越神奇。
首先使用 route -n get 198.18.0.2 结果如下:
   route to: 198.18.0.2
destination: 198.18.0.2
    gateway: 198.18.0.1
  interface: utun10
但是只要不是 198.18.0.1 和 198.18.0.2 (有时候 0.3 也可能是)则结果如下:
   route to: 198.18.0.4
destination: 128.0.0.0
       mask: 128.0.0.0
    gateway: 198.18.0.1
  interface: utun10
   route to: 198.18.1.2
destination: 128.0.0.0
       mask: 128.0.0.0
    gateway: 198.18.0.1
  interface: utun10
看到这个 destination 应该是 CIDR 128.0.0.0/1 起作用了。
查看路由表:
~ netstat -rn
Routing tables
Internet:
Destination        Gateway            Flags           Netif Expire
default            192.168.31.1       UGScg             en1
default            link#28            UCSIg           utun3
1                  198.18.0.1         UGSc           utun10
2/7                198.18.0.1         UGSc           utun10
4/6                198.18.0.1         UGSc           utun10
8/5                198.18.0.1         UGSc           utun10
16/4               198.18.0.1         UGSc           utun10
32/3               198.18.0.1         UGSc           utun10
64/2               198.18.0.1         UGSc           utun10
100.64/10          link#28            UCS             utun3
100.100.100.100/32 link#28            UCS             utun3
100.124.11.45      100.124.11.45      UH              utun3
127                127.0.0.1          UCS               lo0
127.0.0.1          127.0.0.1          UH                lo0
128.0/1            198.18.0.1         UGSc           utun10
169.254            link#13            UCS               en1      !
169.254.12.71      50:ed:3c:3:2:c     UHLSW             en1      !
169.254.35.85      60:dd:8e:69:5c:d0  UHLSW             en1      !
192.168.31         link#13            UCS               en1      !
192.168.31.1/32    link#13            UCS               en1      !
192.168.31.1       88:c3:97:c8:2:b6   UHLWIir           en1   1169
192.168.31.24      4:cf:8c:29:a4:97   UHLWI             en1   1157
192.168.31.59      c:7a:15:c1:ad:cc   UHLWI             en1      !
192.168.31.73      6:6e:f7:98:f3:4b   UHLWI             en1    349
192.168.31.80      84:c5:a6:9e:4:3    UHLWI             en1    601
192.168.31.129     86:11:14:df:18:ce  UHLWI             en1    555
192.168.31.144     56:f9:cf:1e:97:7d  UHLWI             en1     95
192.168.31.166/32  link#13            UCS               en1      !
192.168.31.189     66:17:81:34:32:5c  UHLWI             en1   1112
192.168.31.199     60:dd:8e:69:5c:d0  UHLWIi            en1   1160
192.168.31.213     50:ed:3c:3:2:c     UHLWIi            en1   1189
192.168.31.214     2:69:d6:3d:12:3d   UHLWI             en1   1179
192.168.31.222     f8:d0:27:54:e4:84  UHLWI             en1   1200
192.168.31.255     ff:ff:ff:ff:ff:ff  UHLWbI            en1      !
198.18.0.1         198.18.0.1         UH             utun10
224.0.0/4          link#13            UmCS              en1      !
224.0.0/4          link#28            UmCSI           utun3
224.0.0.251        1:0:5e:0:0:fb      UHmLWI            en1
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI            en1
255.255.255.255/32 link#13            UCS               en1      !
255.255.255.255/32 link#28            UCSI            utun3
里面关于 utun10 的几条解释:
2/7 地址范围: 2.0.0.0 到 2.255.255.255
4/6 地址范围: 4.0.0.0 到 7.255.255.255
8/5 地址范围: 8.0.0.0 到 15.255.255.255
16/4 地址范围: 16.0.0.0 到 31.255.255.255
32/3 地址范围: 32.0.0.0 到 63.255.255.255
64/2 地址范围: 64.0.0.0 到 127.255.255.255
128.0/1 地址范围: 128.0.0.0 到 255.255.255.255
198.18.0.1  就表示它自己
所以除了 198.18.0.1 之外其余的都应该解析成 128.0.0.1 才对啊。那 198.18.0.2 为啥也解析成自己了呢?
我的理解: 跑的服务程序可以监听本地网口, 每个网口有对应的 ip 地址,如果监听 0.0.0.0 则表示所有网口,如果监听 127.0.0.1 则表示监听 lo0 ,如果监听 192.168.31.166 (我电脑 en0 地址)则表示监听 en0 网口,任何发送到这个网口的数据(当然要指定好端口号)都会被转发到这个服务程序。
但查看 ifconfig 则看不到 198.18.0.2 是属于哪一个接口的,而它是 utun10(198.18.0.1)的一个子网 ip 。当开启虚拟网口后(软件的增强模式透明模式) dns 被改成 198.18.0.2 是为什么?使用 dig 程序测试也是没问题的:
~ dig @198.18.0.2 -p 53 baidu.com
~ dig @198.18.0.2 -p 53 google.com
~ dig @198.18.0.2 -p 53 fb.com
结果都是 fakeip 。
所以,我哪里理解错了吗?为什么会有 198.18.0.2 ?
写一个程序来测试:
```javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'text/plain');
res.end('Hello');
});
const ifrq = "198.18.0.2";
server.listen(3000, ifrq, () => {
console.log(`Server running at http://${ifrq}:3000/`);
});
```
开启增强模式后 如果 ifrq 是 198.18.0.1 则可以正常绑定到这个地址,打开这个地址 3000 端口后正常响应。
但如果将 ifrq 改成 198.18.0.2 ,则服务起不了 Error: listen EADDRNOTAVAIL: address not available 198.18.0.2:3000.

en1, utun10

imnpc   
写一个程序来测试:
```javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'text/plain');
res.end('Hello');
});
const ifrq = "198.18.0.2";
server.listen(3000, ifrq, () => {
console.log(`Server running at http://${ifrq}:3000/`);
});
```
开启增强模式后 如果 ifrq 是 198.18.0.1 则可以正常绑定到这个地址,打开这个地址 3000 端口后正常响应。
但如果将 ifrq 改成 198.18.0.2 ,则服务起不了 Error: listen EADDRNOTAVAIL: address not available 198.18.0.2:3000.
FaiChou
OP
  
装了 ClashX ?开了增强模式?
Darin726   
@imnpc 对,故意没有说这几个单词的,容易触发关键字,被移动到某节点下,不会出现在首页。
FaiChou
OP
  
@FaiChou #2 clash 的增强模式会新建一个虚拟网卡接管本机的网络,你发的这个 IP 就是虚拟网络的内网
bigshawn   
@Darin726 为什么不是 198.18.0.1 而是 0.2 ? 通过 dig 命令可以测试到 198.18.0.1 也是可以响应 dns 请求的( listen: 0.0.0.0:53 起作用)。为什么要用 0.2 这个子网?
ETiV   
虚拟网卡不必在意。
FaiChou
OP
  
https://en.wikipedia.org/wiki/Reserved_IP_addresses
198.18.0.0/15 是保留地址
bigshawn   
我写了一个程序来测试:
```
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'text/plain');
res.end('Hello');
});
const ifrq = "198.18.0.2";
server.listen(3000, ifrq, () => {
console.log(`Server running at http://${ifrq}:3000/`);
});
```
开启增强模式后 如果 ifrq 是 198.18.0.1 则可以正常绑定到这个地址,打开这个地址 3000 端口后正常响应。
但如果将 ifrq 改成 198.18.0.2 ,则服务起不了 Error: listen EADDRNOTAVAIL: address not available 198.18.0.2:3000
您需要登录后才可以回帖 登录 | 立即注册

返回顶部