首页 > 解决方案 > 用PHP访问wifi路由器

问题描述

如果可以,是否可以在 PHP 中访问 wifi 路由器,然后如何?

获取主机IP地址的代码(但我想要有关路由器的信息):

$myIP = gethostbyname(trim(`hostname`));
    echo $myIP;dd();

<?php

简单代码示例:

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
    socket_bind($socket,'0.0.0.0',150);

socket_getsockname($socket, $IP, $PORT);

print $IP.":".$PORT."\n";

?>

标签: php

解决方案


现在大多数路由器都有 SSDP 服务。基本上,您向广播地址发送了一个小数据包,许多设备都会响应它。您的路由器将是其中之一。

我的路由器将自己暴露为“urn:dslforum-org:device:InternetGatewayDevice:1”,SSDP 可以仅为您过滤该设备。这段快速而肮脏的代码对我有用:

<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, getprotobyname('udp'));
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, true);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=> 1, 'usec'=>'0'));
//socket_set_option($socket, IPPROTO_IP, IP_MULTICAST_IF, "xxxx"); //only if you have multiple network cards
$data = "M-SEARCH * HTTP/1.1\n".
        "HOST: 239.255.255.250:1900\n".
        "MAN: \"ssdp:discover\"\n".
        "MX: 1\n".
        "ST: urn:dslforum-org:device:InternetGatewayDevice:1\n\n";
socket_sendto($socket, $data, strlen($data), 0, "239.255.255.250", "1900");
socket_recvfrom($socket, $mess, 1024, 0, $ip, $port);
echo $mess;
echo $ip;
socket_close($socket);

所以现在你有了路由器的IP地址。使用 UPnP,您现在可以查询您的路由器。我的路由器通过 UPnP 提供了很多信息,其中一些是:

  • 我的广域网IP地址
  • 我的 wifi SSID 名称、wifi 频道、速度
  • 有关已连接设备的信息,例如主机名、IP 地址等。

推荐阅读