Chuyển tới nội dung chính

Quét thiết bị trong mạng cục bộ bằng UDP

  • Trước tiên, mở một cổng nhận UDP trên máy tính.

  • Sau đó gửi gói quảng bá UDP sau đến cổng 46953 trong mạng cục bộ:

    {"ip":"địa chỉ IP của máy tính","port":50000} // port là cổng lắng nghe của máy tính
  • Thiết bị sẽ phản hồi đến cổng nhận của máy tính bằng dữ liệu sau:

    {
    "ip":"192.168.31.99",
    "port":"46952",
    "devname":"Tên thiết bị",
    "deviceid":"123456789012345678901234567890123456790", // UDID của thiết bị
    "devsn":"XXXXXXXXXXXX", // số sê-ri của thiết bị
    "devmac":"02:03:04:05:06:07", // địa chỉ MAC Wi‑Fi của thiết bị
    "devtype":"iPhone8,1", // kiểu thiết bị
    "zeversion":"0.0.1.738", // phiên bản dịch vụ
    "sysversion":"9.0.2" // phiên bản iOS
    }
  • Ví dụ quét UDP phía máy tính bằng Python 3.x:

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

    local_ip = '192.168.31.13' # địa chỉ IP của máy tính
    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) # mã hóa bằng UTF-8

    while True:
    data, addr = s.recvfrom(2048)
    if not data:
    print("máy khách đã thoát")
    break
    print("đã nhận:", data, "từ", addr)

    s.close()
  • Ví dụ quét UDP phía máy tính bằng Node.js:

    const http = require('http');
    const dgram = require('dgram');

    const server_Port = 31500; // cổng nhận UDP
    const client_Port = 31501; // cổng gửi UDP

    const device_List = {}; // danh sách thiết bị

    // Máy chủ UDP (nhận)
    const server_Socket = dgram.createSocket('udp4');
    server_Socket.on('message', function(msg, rinfo){
    console.log('đã nhận: %s', msg);
    const device_Info = JSON.parse(msg);
    if (device_Info.deviceid) {
    device_List[device_Info.deviceid] = device_Info; // loại trùng theo deviceid
    }
    });
    server_Socket.bind(server_Port);

    // Máy khách UDP (gửi)
    const client_Socket = dgram.createSocket('udp4');
    client_Socket.bind(client_Port);

    function search(){
    const server_List = [];
    const os = require('os');
    const ifaces = os.networkInterfaces();
    for (const dev in ifaces) {
    ifaces[dev].forEach(function(details){
    if (details.family === 'IPv4') {
    server_List.push(details.address);
    }
    });
    }
    for (const address of server_List) {
    const ip_ar = address.split(".");
    const send2ip = `${ip_ar[0]}.${ip_ar[1]}.${ip_ar[2]}.255`;
    const client_Socket = dgram.createSocket('udp4');
    const msg = JSON.stringify({ip: 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('Dịch vụ web tại: http://127.0.0.1:22222/');