development

원격 호스트에서 하나의 포트 상태 확인

big-blog 2020. 6. 10. 07:52
반응형

원격 호스트에서 하나의 포트 상태 확인


원격 호스트에서 포트 상태를 확인할 수있는 명령 줄이 필요합니다. 시도 ping xxx.xxx.xxx.xxx:161했지만 "호스트"를 인식하지 못합니다. 포트가 열려있는 호스트에 대해 동일한 명령을 수행 할 때까지 "좋은"답변이라고 생각했습니다. 이것은 원격 포트의 상태를 확인한 다음 해당 원격 포트를 사용하여 명령을 실행 한 다음 원격 포트 확인 명령을 다시 실행 한 다음 정보를 위해 다음 서버에서 해당 포트를 사용하는 명령을 실행하는 배치 파일입니다. , 등등. 나는 모든 곳을보고 핑이 할 수 있다고 생각했지만 다양한 버전의 핑이 있어야한다고 생각합니다.이 작업을 수행하는 서버에 해당 옵션이 표시되지 않는다고 가정합니다.

딱딱 거리기 위해 웹 사이트에서 웹 기반 원격 포트 검사기를 사용해 보았습니다. 결과는 "문제"서버와 올바른 서버 모두에 대해 정확했습니다. 그러나 500 개 이상의 서버 IP가있는 배치 실행에서는 사용할 수 없습니다.

내가 할 수있는 일이 간단합니까? 내 Perl 기술은 매우 녹슨 (사용하거나 잃어 버림) 배치를 제외한 다른 Windows 기반 언어를 모릅니다. 유닉스는 제 기술이지만 Widows Server 2003에서 실행해야합니다.


Windows, Linux 및 Mac OS X에서 모두 사용할 수있는 nmap 또는 netcat 과 같은 포트 스캐너를 찾고있는 것 같습니다.

예를 들어, 알려진 IP에서 텔넷을 확인하십시오.

nmap -A 192.168.0.5/32 -p 23

예를 들어 host.example.com에서 20에서 30까지 열린 포트를 찾으십시오.

nc -z host.example.com 20-30

명령 프롬프트에서 telnet 명령을 사용할 수 있습니다. 예를 들어 포트 80을 사용하여 IP 192.168.10.1에 연결하려면

telnet 192.168.10.1 80

Windows 7 이상에서 텔넷을 활성화하려면을 클릭하십시오 . 링크 된 기사에서 제어판-> 프로그램 및 기능-> Windows 기능-> 텔넷 클라이언트를 통해 텔넷을 활성화하거나 관리자 프롬프트에서이를 실행하십시오.

dism /online /Enable-Feature /FeatureName:TelnetClient

스크립팅을 위해 다음과 같은 curl명령을 수행 할 수 있다는 것을 알게되었습니다 .

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

curl경우에 따라 (댓글에 따라) 다른 오류 코드를 반환 할 수 있으므로 모든 서비스에서 작동하지 않을 수 있으므로 다음 조건을 추가하면 안정적인 방식으로 작동 할 수 있습니다.

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

참고 : -m5최대 연결 시간 제한을 5 초로 설정하기 위해 추가되었습니다 .

호스트가 유효한지 확인하려면 6종료 코드도 확인해야합니다 .

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve host: foo
FAIL

반환 된 오류 코드 문제를 해결하려면 다음을 실행하십시오 curl host:port.

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

man curl종료 코드의 전체 목록은 다음 참조하십시오 .


를 눌러 Windows+의 R유형 cmdEnter

명령 프롬프트에서

telnet "machine name/ip" "port number"

포트가 열려 있지 않으면이 메시지가 표시됩니다.

"Connecting To "machine name"...Could not open connection to the host, on port "port number":

그렇지 않으면 열린 포트로 이동합니다 (빈 화면이 표시됨)


nc 명령을 사용하십시오.

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

텔넷 명령을 사용할 수도 있습니다

telnet <ip/host> port

nc 또는 'netcat'에도 사용 가능한 스캔 모드가 있습니다.


Windows 버전이있는 Hping ( http://www.hping.org/ )을 찾고 있다고 생각합니다 .

"인터페이스는 ping (8) unix 명령에서 영감을 얻었지만 hping은 ICMP 에코 요청 만 보낼 수 없습니다. TCP, UDP, ICMP를 지원합니다 ..."

It's also very useful if you want to see where along a route that a TCP port is being blocked (like by a firewall), where ICMP might not be.


In Bash, you can use pseudo-device files which can open a TCP connection to the associated socket. The syntax is /dev/$tcp_udp/$host_ip/$port.

Here is simple example to test whether Memcached is running:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

Here is another test to see if specific website is accessible:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

For more info, check: Advanced Bash-Scripting Guide: Chapter 29. /dev and /proc.

Related: Test if a port on a remote system is reachable (without telnet) at SuperUser.

For more examples, see: How to open a TCP/UDP socket in a bash shell (article).

참고URL : https://stackoverflow.com/questions/1168317/check-status-of-one-port-on-remote-host

반응형