производительность — PHP & gt; Пинг без рута

Я хочу быстро и легко проверить один IP-адрес с помощью небольшого сценария проверки связи. Я не знаю, возможно ли это, я рассмотрел другие методы, но они требовали, чтобы у меня был root-доступ к моему серверу, которого у меня нет. Поэтому мне было интересно, если бы кто-нибудь знал, как это сделать, я видел пару человек, использующих Nmap, но я не могу этого понять.

Если у кого есть идеи пишите.

0

Решение

Возможно, вы захотите использовать функции сокета для создания ping-пакета ICMP с предварительно рассчитанной контрольной суммой. Вот код, который я использую для проверки связи с PHP:

function pingHost($host, $timeout=1) {
$payload = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
$socket = socket_create(AF_INET, SOCK_RAW, 1);

socket_set_options(
$socket,
SOL_SOCKET,
SO_RCVTIMEO,
array(
'sec' => $timeout,
'usec' => 0,
)
);
socket_connect($socket, $host, 0);
socket_send($socket, $payload, strlen($payload), 0);

if (socket_read($socket, 255) === false) {
$result = true;
} else {
$result = false;
}

socket_close($socket);
return $result;
}

echo pingHost('myhostname');

Ах, я пропустил, что вам нужен рут для этого. Тогда вы не можете ICMP пинговать хост. Однако вы можете выполнять другие виды пинга, которые могут быть столь же хорошими. Ключ заключается в том, чтобы узнать, какие сервисы работает на хосте. Это веб-сервер с HTTP или HTTPS?

Тогда вы можете использовать cURL.

// http://css-tricks.com/snippets/php/check-if-website-is-available/
function isDomainAvailible($domain)
{
//check, if a valid url is provided
if(!filter_var($domain, FILTER_VALIDATE_URL))
{
return false;
}

//initialize curl
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

//get answer
$response = curl_exec($curlInit);

curl_close($curlInit);

if ($response) return true;

return false;
}

Если curl недоступен, вы можете использовать get_file_contents () с известным действительным URL.

Это сервер БД, скажем, MySQL или MSSQL? Сделайте что-то подобное, но используйте PDO, чтобы открыть соединение с ним и выполнить команду.

Если служба работает, то хост находится в сети. Конечно, это проверяет, работает ли сетевой стек хоста И работает ли служба. Но так как вы не можете пинговать без рута, это может быть вашим лучшим выбором.

Наконец, вы всегда можете попробовать и посмотреть, будет ли работать вызов ping exec () или system (), или создать сценарий оболочки с привилегиями root, а затем выполнить его с помощью PHP.

Это все способы работы, которые я знаю.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]