원격 호스트에서 하나의 포트 상태 확인 [닫힘]


158

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

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

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


5
serverfault.com에서이 질문을해볼 수 있습니다.
John Rasch

1
누군가가 이미 이것을했습니다 : serverfault.com/questions/309357/ping-a-specific-port
Vadzim

1
이 질문이 닫히면 서 여기에
npocmaka


ps> tnc xxx.xxx.xxx.xxx -port 161
Moslem Shahsavan 5

답변:


151

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

이 두 가지 모두 Windows에서 사용할 수 있습니다.
Glenn

1
nmap 명령은 공백없이 실제 "-p23"이어야합니다. nmap은 플래그 바로 앞에 있지 않은 각 유닛을 별도의 스캔 대상으로 취급합니다.
Brandon Lebedev

14
이어야합니다 nc -zv host.example.com 20-30. 그렇지 않으면 출력이 없습니다
Aryeh Beitz

1
Linux에서는에 -z대한 옵션 을 nc사용할 수 없습니다.
valentin_nasta

1
@valentin_nasta 예, 아마도 사용중인 netcat 버전 (gnu 또는 openbsd)에 따라 다릅니다. 다음은 내 아치 리눅스 시스템에서 nc (openbsd 버전) 매뉴얼 페이지의 관련 줄입니다. -z nc는 데이터를 보내지 않고 수신 데몬 만 검색하도록 지정합니다. 이 옵션을 -l 옵션과 함께 사용하면 오류가 발생합니다.
pgoetz

126

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

telnet 192.168.10.1 80

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

dism /online /Enable-Feature /FeatureName:TelnetClient

3
텔넷는 Windows의 장치에 설치되어있는 경우이 가장 쉬운 방법입니다
shonky 리눅스 사용자

30
... 창에 추가하는 데 2 ​​초가 걸립니다 (제 경우 8.1)> 제어판> 프로그램 추가> 창 기능 켜기
Chris Moutray

14
정보를 위해서만 : 포트가 열려 있지 않은 경우 : 연결 중 ##### ... 포트 ####에서 호스트에 대한 연결을 열 수 없습니다 : 연결 실패; 포트가 열려 있으면 telnet (CTRL +], 'quit')으로 끝납니다.
blackstrype

27

스크립팅을 위해 다음과 같은 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종료 코드의 전체 목록은 다음 을 참조하십시오 .


불행히도 이것은 나를 위해 작동하지 않습니다 (적어도 OS X의 bash에서는).
Mike Atlas

1
맞춤형 서비스. FWIW 그것은 일종의 작동합니다 : curl $IP:$PORTyields : curl: (52) Empty reply from server(versus curl: (7) Failed to connect), 그러나 비슷하지만 nc, | grep Empty기대할 수있는 것처럼 이러한 출력 문장 (줄 바꿈에 대한 것 또는 즉각적인 출력 부족)은 없습니다. 귀하의 행이 종료 코드를 기반으로 조건부로 가정합니다. 나는 엘 캡에있다; 다른 버전이나 OS에서는 실패 상태가 -1아닌 종료 상태 52입니까?
Mike Atlas

그래, 그렇게 할거야 curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
Mike Atlas

문제는 Windows에 관한 것이 었습니다. 예를 들어 / dev / null은 없습니다
Arthur Tacca

@ArthurTacca 항상 WSL (Linux for Windows Subsystem)을 사용할 수 있습니다.
kenorb

23

를 눌러 Windows+의 R유형 cmdEnter

명령 프롬프트에서

telnet "machine name/ip" "port number"

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

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

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


7
텔넷은 기본적으로 최신 Windows 시스템에 설치되지 않습니다. Windows 기능 추가 / 제거 제어판에서 설치해야합니다.
Greg

1
@Greg 또는 온라인 도구 등의 사용 telnet-online.net을
온스

2
내부 서버의 상태를 확인하지 않는 한 @oz true
Greg

Windows10에서 작동
gaurav

19

nc 명령을 사용하십시오.

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

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

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

telnet <ip/host> port


2

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

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

ICMP가 아닐 수있는 TCP 포트가 방화벽과 같은 경로를 따라 차단되는 위치를 확인하려는 경우에도 매우 유용합니다.


2

Bash에서는 의사 장치 파일을 사용하여 관련 소켓에 대한 TCP 연결을 열 수 있습니다. 구문은 /dev/$tcp_udp/$host_ip/$port입니다.

다음은 Memcached가 실행 중인지 테스트하는 간단한 예입니다.

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

특정 웹 사이트에 액세스 할 수 있는지 확인하는 또 다른 테스트가 있습니다.

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

자세한 내용은 Advanced Bash-Scripting Guide : Chapter 29. /dev및을 확인하십시오/proc .

관련 : SuperUser에서 원격 시스템의 포트에 텔넷없이 연결할 수 있는지 테스트하십시오 .

더 많은 예제 는 bash 쉘 (문서) 에서 TCP / UDP 소켓을 여는 방법을 참조하십시오 .


1
와, 천재입니다! 나는 이것이 bash만으로 가능하다는 것을 모른다. Windows에 git bash 만 설치하고 다른 서비스를 설치하지 않으려는 저와 같은 사람들에게 편리합니다.
dotslashlu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.