'ping'응용 프로그램을 사용할 수없는 Linux 시스템에 있습니다 (ping : icmp 오픈 소켓 : 작동이 허용되지 않음). 그러나 필자가 작성한 스크립트 (PHP는 필요하지만 필요한 경우 모든 스크립트/프로그램에 exec() 호출을 사용할 수 있음)는 호스트가 '활성 상태'인지 여부를 결정해야합니다. 'ping'을 사용하지 않고 어떻게이 문제를 해결할 수 있습니까?'ping'을 사용하지 않고 동적 언어에서 핑
답변
핑이 수행 할 수없는 경우 다른 언어로는 수행 할 수 없습니다. 이유를 이해하는 데 도움이되는 비유가 있습니다. 파일 시스템에 파일이 있고 그 내용을 원한다고 가정 해 봅시다. cat filename
을 실행하면 cat: filename: Permission denied
이라고 표시됩니다. Perl (또는 다른 언어)이 C보다 공정하게 좋을 것이라고 생각하십니까? 시도해 보겠습니다.
#!/usr/bin/perl
use strict;
use warnings;
die "usage: $0 filename" unless @ARGV == 1;
my $filename = shift;
open my $fh, "<", $filename
or die "could not open $filename: $!\n";
print while <$fh>;
파일에 대해 실행하면 could not open filename: Permission denied
이라고 표시됩니다. 어떤 언어를 사용 하든지간에 Operation not permitted
을 얻으려고합니다.
그렇다면 컴퓨터가 살아 있는지 확인하는 다른 방법이 있습니다. 컴퓨터에서 항상 실행되고있는 것으로 알려진 서버가 있으면이 서버에 연결을 시도 할 수 있습니다. 연결을 성공적으로 시작할 수 있다는 사실만으로도 해당 상자가 작동 중임을 알면 연결 (예 : 로그인)을 완료 할 필요가 없습니다.
http://us2.php.net/manual-lookup.php?pattern=socket
하지만 핑 (ping)과 소켓을 열 수없는 경우, 당신이 중 하나를 사용할 수있는 확률이 낮다. 호스팅 제공 업체에 문의하십시오.
PHP 설명서는 ping in PHP 구현을위한 사용자 제공 코드를 제공합니다. 안타깝게도 루트 액세스가 필요하므로 사용하지 못할 수도 있습니다. 어디 근처에 상당 핑되고 있지만, 사용자의 요구에 여전히 어쩌면 적합됩니다
c = curl_init('http://www.site.com/');
curl_exec($c);
$info = curl_getinfo($ch);
: 하나 개의 대안은 컬을 사용하고 curl_getinfo()에 의해 반환 된 값을 살펴 보는 것입니다.
ping (ICMP)을 수행하려면 루트 액세스가 필요합니다.
유일한 방법은 TCP 또는 UDP ping입니다. 당신은 예 Cacti의 코드를 확인하거나 당신
을 위해 그것을 할 HPING를 사용하거나 유닉스에 "핑 (ping)"프로그램에 SUID 비트를 설정할 수 있습니다 원하는 경우)