프록시에서 일반적으로 사용되는 열린 포트를 검색하는 빠른 방법을 찾고 있습니다. 나는 PHP를 통해 이 작업을 수행하고 있으며 nmap을 사용하고 있으며 다음 명령을 생각해 냈습니다.
<?php
system("nmap -PN -p U:1194,T:21,22,25,53,80,110,111,143,443,465,993,995,3306,8443,553,554,1080,3128,6515,6588,8000,8008,8080,8081,8088,8090,8118,8880,8909,1723,7080 {$_SERVER['REMOTE_ADDR']} 2>&1");
?>
문제는 스캔이 완료되는 데 보통 1~2초가 걸린다는 점인데, 방금 포트 80을 정의했는데도 여전히 1~2초 정도 걸립니다.
그러나 PHP에서 이 작업을 수행하면 거의 즉시 반환되거나 0.5초 안에 시간 초과가 발생합니다.
if( @fsockopen( $_SERVER['REMOTE_ADDR'], $port, $errstr, $errno, 0.5 ) )
die("php_tests_callback({success: false, message: 'Client has port $port open'});");
그렇다면 NMAP을 사용하는 더 최적의 방법이나 대안이 있는지 궁금합니다. 나는 많은 fsockopen을 실행하기 위해 일종의 PHP 분기 프로세스를 작성하고 싶습니다.
편집하다:
분명히 질문을 게시하기 전에 NMAP 담당자를 읽어야 할 것 같습니다. 저는 일반적으로 스캔 시간을 0.50초 이상으로 줄이는 다음 매개변수를 생각해냈습니다.
system("nmap -T5 --host-timeout 4s --min-rate 1000 -PN -p U:1194,T:21,22,25,53,80,110,111,143,443,465,993,995,3306,8443,553,554,1080,3128,6515,6588,8000,8008,8080,8081,8088,8090,8118,8880,8909,1723,7080 {$_SERVER['REMOTE_ADDR']} 2>&1");
그러나 저는 여전히 다른 제안/신청에 열려 있습니다.
답변1
보세요비 지도웹 호스팅 Nmap 스캐너. 2년 전 Nmap 개발팀의 지도 하에 Google Summer of Code 프로젝트로 개발되었습니다.
답변2
-n
DNS 확인을 비활성화하는 옵션을 사용해 보십시오 .
답변3
실제로 -T5 --host-timeout이 올바른 방법입니다.
UDP 포트 스캔으로 인해 스캔 속도가 느려질 수 있습니다. 이 포트 udp1194를 제거하면 스캔 속도를 더욱 높일 수 있습니다.
-T5 옵션이 너무 오래 걸려 UDP 스캔을 취소했을 수 있으므로 제가 틀렸을 수도 있습니다.
nmap 개발자가 작성한 "Nmap Discovery Protocol"에 따르면 다음과 같이 인용합니다.
UDP 스캐닝의 또 다른 큰 과제는 스캔을 빠르게 완료하는 것입니다. 열려 있고 필터링된 포트는 응답을 거의 보내지 않으므로 Nmap이 시간 초과되어 프로브나 응답이 손실될 경우 재전송됩니다. 닫힌 포트는 일반적으로 더 큰 문제입니다. 일반적으로 ICMP 포트에 연결할 수 없음 오류를 다시 보냅니다. 그러나 SYN 또는 연결 검색에 대한 응답으로 TCP 포트에서 전송된 RST 패킷을 닫는 것과는 달리 많은 호스트에서는 기본적으로 ICMP 포트에 연결할 수 없는 메시지의 속도를 제한합니다. Linux와 Solaris는 이에 대해 특히 엄격합니다. 예를 들어, Felix의 Linux 2.4.20 커널은 대상에 연결할 수 없는 메시지를 초당 하나로 제한합니다(net/ipv4 I icmp.c에서).
많은 취약한 서비스가 이 프로토콜을 사용하기 때문에 UDP 포트를 검색하는 것이 중요하지만 UDP 검색의 타이밍 특성 및 성능 요구 사항은 TCP 검색과 크게 다릅니다. 특히 우려되는 것은 ICMP 오류 비율 제한입니다. 이는 매우 일반적이며 TCP보다 UDP 스캔에 훨씬 더 많은 영향을 미칩니다. 성능이 중요한 경우에는 TCP와 UDP 스캐닝을 결합하지 않는 것이 좋습니다.