您可以簡單地執行shell_exec('nslookup ' . $_POST["domain"]);
,但卻輸出將與此類似:
服務器:127.0.0.1.in.addr.arpa地址:192.168.1.254
消毒
請不要不使用下面的代碼作爲 - 是的,因爲它引入了顯著SECUR這些問題可以用來消滅你的整個網絡服務器。
因此需要使用正則表達式或一系列字符串拆分來隔離IP地址。我用txt2re來幫助我,這是最後的代碼塊:
if (ISSET($_POST["domain"])) {
$txt=shell_exec('nslookup ' . $_POST["domain"]);
$re1='.*?'; # Non-greedy match on filler
$re2='(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?![\\d])'; # Uninteresting: ipaddress
$re3='.*?'; # Non-greedy match on filler
$re4='((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(?![\\d])'; # IPv4 IP Address 1
if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4."/is", $txt, $matches))
{
$ipaddress1=$matches[1][0];
echo $ipaddress1;
}
}
,其輸出的IP地址:
192.168.1.254
注意上面代碼也會解析內部IP地址。
這是在Windows 10 x64(Professional)上測試的,但沒有在Linux上測試過。 shell_exec('nslookup ' . $_POST["domain"]);
在技術上應該可以在所有平臺上運行,但如上所述,如果你不小心,可以很容易地用來破壞你的系統。
除了這麼多(如果不是全部的話)網絡主機將不允許使用shell_exec
,因此您需要使用您自己的網絡服務器並提供正確的安全性。如果您不知道如何在您的服務器&代碼上設置正確的安全性,請不要觸摸此代碼。
@Machavity不提供我的問題的答案(如下所示)。 – cybermonkey
它不能回答它? – Machavity
@Machavity看我的編輯。也許我錯誤地使用它,然後我想我可能會混淆它通過使用本地地址,但我使用適當的公共DNS名稱作爲輸入(我''_GET''測試),所以我不知道。 – cybermonkey