admin管理员组

文章数量:1534360

1. 360极速浏览器代理设置无效问题

360极速浏览器版本:12.0.1412.0
360极速浏览器版本:13.0.2206.0
本地监听1080的socks5代理,发现360极速浏览器不生效,原因是代理协议版本协商通讯时产生问题,经测试后,发现360很奇怪,我填了如下设置,按照socks标准协议来执行,仅仅第二行是有效的,其余问题有无法连接网络,或关闭服务器依旧可以连接网络加载网页内容。

127.0.0.1:1080
127.0.0.1:1080@socks
127.0.0.1:1080@socks5
127.0.0.1:8899@http
有且只有第二行可以 127.0.0.1:1080@socks,1,3,4行全部协商失败,第三行和第四行居然不行

2. 查看本机ip地址详细信息

2.1. 本机实际ip地址

C:\Users\lyj>ipconfig

Windows IP 配置

以太网适配器 以太网:

连接特定的 DNS 后缀................:
本地链接IPv6地址...................: fe80::8453:f3ff:fd2a:a4b8%12
IPv4 地址 ........................: 192.168.1.204
子网掩码..........................: 255.255.254.0
默认网关..........................: 192.168.1.254
C:\Users\lyj>ipconfig/all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : mark
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller
   物理地址. . . . . . . . . . . . . : 00-D8-61-58-61-80
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是
   本地链接 IPv6 地址. . . . . . . . : fe80::8453:f3ff:fd2a:a4b8%12(首选)
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.204(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.254.0
   默认网关. . . . . . . . . . . . . : 192.168.1.254
   DHCPv6 IAID . . . . . . . . . . . : 100718689
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-24-C7-08-81-00-D8-61-58-61-80
   DNS 服务器  . . . . . . . . . . . : 114.114.114.114
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

2.2. 本机本地回环地址

127.0.0.1

其实不仅仅127.0.0.1为回环地址,只要以127开头的IP地址,都是回环地址,范围为(127.0.0.1 - 127.255.255.254其中不包含 127.255.255.255),它们都是指向本机,指向回环地址的,回环地址所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。所谓的回环地址,通俗的讲,就是我们在主机上发送给127开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。正常的数据包会从IP层进入链路层,然后发送到网络上;而给回环地址发送数据包,数据包会直接被发送主机的IP层获取,后面就没有链路层他们啥事了。
127.0.0.1作为 {127} IP 集合中的一员,当然也是个回环地址。只不过127.0.0.1经常被习惯默认配置为localhost的IP地址,所以我们才一般会通过使用windows 终端命令来ping 127.0.0.1来测试某台机器上的网络设备是否工作正常。

3. 服务器 SeverSocket 监听所有IP地址的相同端口问题

我们首先来浏览以下两张图片,从图片中标注的顺序操作,我们可以发现只要我们在QQ代理设置面板中所设置的需要访问的服务器的IP地址为127开头的IP地址,那么服务器在获取服务器自身的本地IP地址时所获取到的IP地址就是QQ代理服务器设置面板中所填写的IP地址。这让我们产生了一个疑问,为什么服务器的IP地址会由客户端的设置来决定?这里涉及到服务器 SeverSocket 监听所有IP地址的相同端口的特性

QQ代理服务器设置面板:

现在对于上述产生的疑问进行解答:127开头的IP地址都是回环地址,这一点在前面已经有过清楚的说明**(其实不仅仅127.0.0.1为回环地址,只要以127开头的IP地址,都是回环地址,范围为(127.0.0.1 - 127.255.255.254其中不包含 127.255.255.255),它们都是指向本机,指向回环地址的)。**只要配置的地址是回环地址集合中的任意地址,以及在1080端口上,那么都会被服务器监听并且接受。这是因为服务器会监听所有回环IP地址的1080端口,服务器选择选择其中发来数据的那个回环地址(即客户端访问的当前回环地址)作为服务器本身的本地IP地址来为客户端提供服务。所以为什么服务器获取本地IP地址和端口,以及获取主机名的打印输出的是QQ代理服务器设置面板输入的地址。

测试代码:

        /**
         * +----------------------------------------------+
         * | QQ代理服务器设置面板输入的地址为 127.1.2.3:1080 |
         * | 即配置QQ需要访问的服务器所在的地址和端口,这个地  |
         * | 址也是服务器的本机地址                          |
         * +----------------------------------------------+
         *
         * 注意只要配置的地址是回环地址集合中的任意地址, 以及在1080端口上
         * 那么都会被服务器监听并且接受. 这是因为服务器会监听所有回环IP地址的
         * 1080端口, 服务器选择选择其中发来数据的那个回环地址作为服务器本身的
         * 本地IP地址来为客户端服务. 所以为什么服务器获取本地IP地址和端口,
         * 以及获取主机名的打印输出是QQ代理服务器设置面板输入的地址.
         */
        ServerSocket server = new ServerSocket(1080);
        System.out.println("Sever");
        System.out.println(server);
        /**
         * ServerSocket[addr=0.0.0.0/0.0.0.0,localport=1080]
         * addr: 是被服务器所绑定的客户端的IP地址和端口, 如果未绑定IP地址, 
         *       这个值是 0.0.0.0, 在这种情况下, ServerSocket对象将监听服务端
         *       所有网络接口的所有IP地址, port永远是0
         * localport: 是服务器自己的监听端口
         */

        Socket accept = server.accept();
        System.out.println("Sever accept");
        System.out.println(accept);
        /**
         * Socket[addr=/127.0.0.1,port=8324,localport=1080]
         * addr,port: 是服务器所绑定的客户端的IP地址和端口, 目前已经绑定到/127.0.0.1,port=8324
         * localport: 是服务器自己的监听端口
         */

        SocketAddress localAddrress = accept.getLocalSocketAddress();
        System.out.println("localAddrress");
        System.out.println(localAddrress.toString());
        // /127.1.2.3:1080

        SocketAddress remoteAddrress = accept.getRemoteSocketAddress();
        System.out.println("remoteAddrress");
        System.out.println(remoteAddrress.toString());
        // 这里远程地址指的是客户端地址 /127.0.0.1:8324

        byte[] local = new byte[4];
        local = accept.getLocalAddress().getAddress();
        System.out.println("accept.getLocalAddress()");
        System.out.print(local[0] + ".");
        System.out.print(local[1] + ".");
        System.out.print(local[2] + ".");
        System.out.print(local[3] + ":");
        System.out.println(accept.getLocalPort());
        // 127.1.2.3:1080

        String host = null;
        host = accept.getLocalAddress().getHostAddress();
        System.out.println("accept.getHostAddress()");
        System.out.print(host + ":");
        System.out.println(accept.getLocalPort());
        // 127.1.2.3:1080

本文标签: 极速浏览器