Zum Hauptinhalt springen

Geräte im lokalen Netzwerk per UDP scannen

  • Öffnen Sie zunächst auf dem Computer einen UDP-Port zum Empfangen von Nachrichten.

  • Senden Sie anschließend den folgenden UDP-Broadcast an Port 46953 des lokalen Netzwerks.

    {"ip":"IP-Adresse des Computers","port":50000} // port ist der Empfangsport des Computers
  • Nach Empfang dieses Broadcasts antwortet das Gerät wie folgt an den Empfangsport des Computers.

    {
    "ip":"192.168.31.99",
    "port":"46952",
    "devname":"Gerätename",
    "deviceid":"123456789012345678901234567890123456790", // Geräte-UDID
    "devsn":"XXXXXXXXXXXX", // Geräteseriennummer
    "devmac":"02:03:04:05:06:07", // WiFi-MAC-Adresse des Geräts
    "devtype":"iPhone8,1", // Gerätemodell
    "zeversion":"0.0.1.738", // Dienstversion
    "sysversion":"9.0.2" // Systemversion
    }
  • Beispiel für den UDP-Scan lokaler Netzwerkgeräte auf dem Computer (für Python 3.x):

    # -*- coding: utf-8 -*-
    import socket
    import json

    local_ip = '192.168.31.13' # Adresse des Computers
    local_port = 31500

    local = (local_ip, local_port)
    remote = ("255.255.255.255", 46953)
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(local)

    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.sendto(json.dumps({"ip": local_ip, "port": local_port}).encode('utf-8'), remote) # Als UTF-8 codieren

    while True:
    data, addr = s.recvfrom(2048)
    if not data:
    print("client has exited") # Die Funktion print() verwenden
    break
    print("received:", data, "from", addr) # Die Funktion print() verwenden

    s.close()
  • Beispiel für den UDP-Scan lokaler Netzwerkgeräte auf dem Computer (für Node.js):

    var http = require('http');            //HTTP-Dienst

    var dgram = require('dgram'); //UDP-Modul
    var server_Port = 31500; //Dienstport
    var client_Port = 31501; //Sendeport

    var device_List = {}; //Geräteliste

    // Empfangsdienst erstellen
    var server_Socket = dgram.createSocket('udp4');
    server_Socket.on('message', function(msg, rinfo){
    console.log('收到消息:%s', msg);
    var device_Info = JSON.parse(msg)
    // Duplikate filtern
    if(device_Info.deviceid){
    device_List[device_Info.deviceid] = device_Info;
    }
    });
    server_Socket.bind(server_Port);

    // Sendedienst erstellen
    var client_Socket = dgram.createSocket('udp4');
    client_Socket.bind(client_Port);

    var search = function(){
    var server_List = new Array();
    var os = require('os');
    var ifaces = os.networkInterfaces();
    for (var dev in ifaces) {
    var alias = 0;
    ifaces[dev].forEach(function(details){
    if (details.family=='IPv4') {
    server_List.push(details.address);
    ++alias;
    }
    });
    };
    for(var address in server_List) {
    var ip_ar = server_List[address].split(".");
    var send2ip = ip_ar[0] + "." + ip_ar[1] + "." + ip_ar[2] + ".255";
    var client_Socket = dgram.createSocket('udp4');
    var msg = JSON.stringify({ip: server_List[address], port: server_Port});
    client_Socket.send(msg, 0, msg.length, 46953, send2ip);
    };
    }

    http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'application/json'});
    search()
    response.end(
    JSON.stringify(device_List)
    );
    }).listen(22222);
    search()
    console.log('Web 服务地址:http://127.0.0.1:22222/');