如何知道网络上的设备在未连接到网络的情况下正在提供服务

How to know that a device on the a network is offering a service without being connected to the network

我想知道设备上的应用程序如何知道相邻网络中有提供特定服务的设备甚至没有连接到网络。 我将以名为 Xender 的移动应用为例。当您启动此应用程序并单击 "Create a group" 时,它会创建一个 热点 ,并将默认设备热点名称作为网络的 SSID,当另一台设备启动该应用程序并单击"Join group",本设备可以通过感知周围的网络来查看周围可用的设备。第二个设备能够接收第一个设备的名称,甚至无需连接到第一个设备创建的网络。 这怎么可能?特别是在 android.

创建组时 Xender 所做的是创建一个热点,就像您的家庭路由器一样。

路由器打开时所做的是广播它们的名称 (SSID),以便其他设备(例如您的 phone 或笔记本电脑)将能够 "se" 它们并连接到它们。

所以基本上,当一个 Xender 应用程序加入另一个 Xender 应用程序组时,它首先连接到 phone 创建的热点,然后开始在该连接上共享数据。

Xender 只是对 SSID 进行编码,如果您设置名称 "xx",则 SSID 将是 ADYXeHg 或 ADYYeHg 或其他名称,但 ADY_eHg 字母在不同设备中以相同名称保持相同 "xx" 所以我们只需要解码 Xender 的那个方法。

我猜他们使用密码加密将配置文件名称转换为 SSID。

这就是 xender 代码在加密(热点端)时的样子。

code : 这不是 xender 的代码,它是我编写的。

public String Encry(String sc) {
    int i;
    String data = sc;
    StringBuffer pas = new StringBuffer(data);
    for (i = 0; i < pas.length(); i++) {

        int temp = 0;
        temp = (int) pas.charAt(i);
        temp = temp - 10;
        pas.setCharAt(i, (char) temp);
    }
    String data1 = "robo" + pas;
    String[] one = data1.split("robo");
    String s = Arrays.toString(one);
    s = s.substring(1, s.length()-1).replaceAll(",", "");
    StringBuffer tu = new StringBuffer(s);

    for (i = 0; i < tu.length(); i++) {
        int da = 0;
        da = (int) tu.charAt(i);
        da = da + 10;
        tu.setCharAt(i, (char) da);
    }
    System.out.println("\n");
    String star = tu.toString();
    star = star.substring(1, star.length() - 1).replaceAll(",", ""); // remove " * " from String.
    return data1;
}

这就是解密的工作原理(加入网络端): 注意:这不是 xender 的代码,它是由我编写的。

public String Dicry(String SSID) {

    int i;
    String data1 = SSID;
    String[] one = data1.split("robo");
    String s = Arrays.toString(one);
    s = s.substring(1, s.length()).replaceAll(",", "");
    StringBuffer tu = new StringBuffer(s);
    for (i = 0; i < tu.length(); i++) {
        int da = 0;
        da = (int) tu.charAt(i);
        da = da + 10;
        tu.setCharAt(i, (char) da);
    }
    String star = tu.toString();
    star = star.substring(1, star.length()).replaceAll(",", ""); // remove " * " from String.
    return star;
 } // scanner

注意:这段代码是我编码的。它不是 xender 的原始代码。请记住这一点。

这就是密码加密的工作原理。