目录
前文
之前搞了什么 xfping ,xftraceroute,还有什么王者网络检测原理。今天试试用xfping扫下局域网下的设备。
获取子网下所有ip
function getRandIpInRange($cidr)
{
[$subnet, $mask] = explode('/', $cidr);
$ret = [];
$l = pow(2, 32 - $mask) - 1;
$subnet = ip2long($subnet);
for ($i = 1; $i < $l; $i = $i + 1) {
$ip = long2ip(bcadd($subnet, $i));
$ret[] = substr($ip, 0, strrpos($ip, '.')).'.'.$i;
}
return $ret;
}
$ip_list = getRandIpInRange('192.168.1.1/24');
获取设备名
这里修改了xfing formet 函数
$host_list = [];
function formet($ip, $ret)
{
global $host_list;
...
if($loss==100){
return '';
}
$host_name = isset($host_list[$ip])?$host_list[$ip]:($host_list[$ip]=gethostbyaddr($ip));
return sprintf('ip=%s name=%s send=%d recive=%d loss=%.2f%% min=%.2fms max=%.2fms avg=%.2fms ', $ip,$host_name, $sc, $rc, $loss, $min,
$max, $avg);
}
结果
php subnetScan.php
ret
ip=192.168.2.240 name=192.168.2.240 send=2 recive=2 loss=0.00% min=2.29ms max=5.26ms avg=3.78ms
ip=192.168.2.215 name=host.docker.internal send=2 recive=2 loss=0.00% min=0.19ms max=0.24ms avg=0.21ms
ip=192.168.2.13 name=BL-c0-74-68.lan send=2 recive=2 loss=0.00% min=88.79ms max=95.27ms avg=92.03ms
ip=192.168.2.50 name=192.168.2.50 send=2 recive=2 loss=0.00% min=2.99ms max=3.43ms avg=3.21ms
ip=192.168.2.1 name=RT-AC3100-C45B.lan send=2 recive=2 loss=0.00% min=2.30ms max=2.58ms avg=2.44ms
ip=192.168.2.78 name=TL-IPC42A-4.lan send=2 recive=2 loss=0.00% min=7.90ms max=8.11ms avg=8.00ms
ip=192.168.2.205 name=MI5-xiaomishouji.lan send=2 recive=1 loss=50.00% min=43.75ms max=43.75ms avg=43.75ms
total time_ms 8042.7348613739
total cnt 6
和实际情况一致的。
问题
- 苹果手机如果息屏,不响应回包。
- 查设备名有时候很慢
酒店检测摄像头?
其实我觉得可能没什么卵用,禁用ping就把这种扫描器搞定了。