< p >PHP與ARP:如何使用PHP進行網絡掃描及ARP處理< /p >< p >ARP(地址解析協議)是一種在計算機網絡中用來映射MAC地址和IP地址的協議。在網絡掃描或網絡設備識別時,ARP協議的使用是非常常見的。PHP提供了一些函數和類,可以使用它們進行ARP處理和網絡掃描。本文將介紹一些PHP中常用的ARP工具,以及如何使用它們來處理網絡掃描及ARP。< /p >< h2 >使用PHP進行網絡掃描< /h2>< p >在PHP中,可以使用Sockets擴展完成網絡掃描。下面是一個簡單的PHP代碼,該代碼可以掃描指定IP范圍內開放的TCP端口。< /p >< pre >$ip = '192.168.1.';
$start_port = 1;
$end_port = 65535;
for($i = $start_port; $i<= $end_port; $i++)
{
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket === false)
{
continue;
}
@socket_set_nonblock($socket);
@socket_connect($socket, $ip . $i, 80);
$write = null;
$except = null;
$result = @socket_select($read = array($socket), $write, $except, 0);
if($result === false)
{
@socket_close($socket);
continue;
}
if($result === 1)
{
echo 'Port ' . $i . ' is open! \n';
}
@socket_close($socket);
}< /pre >< p >上述代碼通過使用socket_create函數,創建了一個TCP連接,通過循環掃描整個IP地址范圍,然后嘗試連接該地址的TCP端口(80端口)。如果連接成功,則在控制臺輸出端口已經開啟;如果連接失敗或連接超時,則表明端口是關閉的,代碼會繼續掃描下一個端口。< /p >< h2 >使用PHP進行ARP緩存查詢< /h2>< p >PHP提供了獲取一個IP地址對應Mac地址的方法,這使得我們可以輕松查詢ARP緩存。下面是一個簡單的PHP代碼,該代碼通過使用gethostbyaddr函數,獲取指定IP地址的Mac地址。< /p >< pre >$ip = '192.168.1.1';
$mac = exec('arp -a ' . $ip);
$pattern = '/([a-f0-9]{2}-){5}[a-f0-9]{2}/';
preg_match_all($pattern, $mac, $matches);
$mac = isset($matches[0][0]) ? $matches[0][0] : '';
echo 'The MAC address of the IP '.$ip.' is '.$mac;< /pre >< p >上述代碼通過使用exec函數,執行命令行“arp -a”獲取指定IP地址的MAC地址,并通過正則表達式匹配找到MAC地址。函數最后輸出了指定IP地址的MAC地址。< /p >< h2 >使用PHP進行ARP請求< /h2>< p >在PHP中,可以使用fsockopen函數來發送ARP請求,下面是一個簡單的PHP代碼,該代碼可以發送ARP請求并返回指定IP地址的MAC地址。< /p >< pre >function get_mac_by_ip($ip)
{
$handle = @fsockopen('udp://'.$ip, null, $errno, $errstr, 1);
if ($handle === false)
{
return '';
}
$mac = '';
$data = str_repeat(chr(255), 6).str_repeat(pack("H*", str_replace('-', '', $mac)), 16);
fwrite($handle, $data);
stream_set_timeout($handle, 1);
$response = fread($handle, 1024);
fclose($handle);
$response_mac = substr($response, 6, 6);
$mac = bin2hex($response_mac);
return implode('-', str_split($mac, 2));
}< /pre >< p >上述代碼通過使用fsockopen函數,創建一個UDP連接,并向指定IP地址發送ARP請求。如果返回的數據包不為空,則解析數據包中含有的MAC地址,并返回給調用者。< /p >< h2 >總結< /h2>< p >ARP是計算機網絡中非常重要的協議之一,其在網絡掃描及設備識別任務中的重要性不言而喻。在PHP中,可以使用Sockets擴展,也可以使用fsockopen函數完成ARP處理,網絡掃描等操作。通過本文的介紹,相信讀者已經能夠了解如何使用PHP完成ARP處理及網絡掃描,以及如何查詢ARP緩存等操作。< /p >
下一篇php argv用法