2014-01-11 4 views
0

IP 및 포트를 기반으로 서버에 Ping을 수행하려고합니다. 왜 항구? 내가 다른 포트에 로그인 서버 및 게임 서버가됩니다 구축하고 시스템이 바로 지금 내가 캔트는 fsockopenPHP ping IP : 포트

 $start = microtime(true); 
     $fp = @fsockopen($host, $port, $errno, $errstr, $timeout); 
     if (!$fp) { 
      return false; 
     } 
     else { 
      $ping = microtime(true) - $start; 
      $ping = round($ping * 1000); 
      $res['ip'] = $host; 
      $res['port'] = $port; 
      $res['ping'] = $ping; 
      $res['msg'] = 'success'; 
      return $res; 
     } 

을 사용하고 내가 간부() 1을 사용하는 wan't하지 않기 때문에 IP와 포트는 사용자가 입력하고 exec()는 포트를 Ping 할 수 없습니다.

with fsockopen 대기 시간 만 소요될 수 있습니다 (정확하지는 않습니다). 누군가가 내가 Latensy을 얼마나 캔트 알고있는 경우에, 패킷 전송

| 지터, recived 등

어쩌면 PHP 핑에 대한 제 3 자 API의 일종. 미리 감사드립니다.

+0

중복? fsockopen없이 IP + 포트를 핑 (ping)하기 위해 아무런 대답이 없습니다 – Froxz

+0

죄송합니다. 어쨌든, 상황에 대해 자세히 설명해 주시겠습니까? Ping은 ICMP 프로토콜에서 작동하지만 명시된 다른 포트의 Login Server/Game Server도 ICMP를 사용합니까? 나는 당신이 실제로 "ping"을 사용하기를 원한다면 그들이해야한다고 생각합니다. – Gadoma

+0

예 로그인 서버/게임 서버가 ICMP를 사용합니다 – Froxz

답변

1

핑은 ICMP를 사용하고 fsockopen은 TCP 및 UDP만을 사용하기 때문에 socket_create()을 사용해야합니다. ICMP 에코 패킷은 포트를 지정하지 않습니다. socket_create 설명서에는 사용자 주석에 몇 가지 ping() 예제 구현이 있습니다. ICMP는 레이어 3 프로토콜이지만, 포트 번호 layer4에 정의되어 있지만

1

당신은 RFC 792

에서 ICMP 패킷 포맷을 확인할 수 있습니다. 따라서 ICMP 패킷의 포트 번호를 찾지 못할 수도 있습니다.

즉 두 개의 호스트 (IP) 사이에서 대기 시간을 얻을 수는 있지만 IP : 포트 사이에는 대기 시간을 얻을 수 없습니다.