2009-06-18 2 views
0

'ping'응용 프로그램을 사용할 수없는 Linux 시스템에 있습니다 (ping : icmp 오픈 소켓 : 작동이 허용되지 않음). 그러나 필자가 작성한 스크립트 (PHP는 필요하지만 필요한 경우 모든 스크립트/프로그램에 exec() 호출을 사용할 수 있음)는 호스트가 '활성 상태'인지 여부를 결정해야합니다. 'ping'을 사용하지 않고 어떻게이 문제를 해결할 수 있습니까?'ping'을 사용하지 않고 동적 언어에서 핑

답변

2

핑이 수행 할 수없는 경우 다른 언어로는 수행 할 수 없습니다. 이유를 이해하는 데 도움이되는 비유가 있습니다. 파일 시스템에 파일이 있고 그 내용을 원한다고 가정 해 봅시다. 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을 얻으려고합니다.

그렇다면 컴퓨터가 살아 있는지 확인하는 다른 방법이 있습니다. 컴퓨터에서 항상 실행되고있는 것으로 알려진 서버가 있으면이 서버에 연결을 시도 할 수 있습니다. 연결을 성공적으로 시작할 수 있다는 사실만으로도 해당 상자가 작동 중임을 알면 연결 (예 : 로그인)을 완료 할 필요가 없습니다.

0

PHP 설명서는 ping in PHP 구현을위한 사용자 제공 코드를 제공합니다. 안타깝게도 루트 액세스가 필요하므로 사용하지 못할 수도 있습니다. 어디 근처에 상당 핑되고 있지만, 사용자의 요구에 여전히 어쩌면 적합됩니다

c = curl_init('http://www.site.com/'); 
curl_exec($c); 
$info = curl_getinfo($ch); 

: 하나 개의 대안은 컬을 사용하고 curl_getinfo()에 의해 반환 된 값을 살펴 보는 것입니다.

1

ping (ICMP)을 수행하려면 루트 액세스가 필요합니다.

유일한 방법은 TCP 또는 UDP ping입니다. 당신은 예 Cacti의 코드를 확인하거나 당신

1

을 위해 그것을 할 HPING를 사용하거나 유닉스에 "핑 (ping)"프로그램에 SUID 비트를 설정할 수 있습니다 원하는 경우)