텔넷 외에 열린 포트를 확인하는 대안은 무엇입니까?


24

텔넷 VIA 포트를 테스트하기 위해 다음을 사용할 수 있습니다. 다음 예제에서 포트 6667을 테스트합니다.

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

일부 컴퓨터에서는 텔넷을 사용할 수 없습니다 (내부 이유로) 텔넷으로 포트를 확인하는 대안은 무엇입니까?


펄은 옵션인가요?
Jeff Schaller

5
이러한 "내부 이유"로 인해 다른 포트 스캔 소프트웨어를 사용하지 못할 수 있습니다. 은행에서 일하는 사람이 PC에 nmap 사본을 가지고있어서 계약을 해지 한 사람을 알고있었습니다. 그는 업무 관련 목적으로 사용했지만 규정 된 목록에 있었으므로 건물 밖으로 호송되었습니다.
Roger Lipscombe

2
펄은 옵션인가요? – 예
yael

2
텔넷은 정교한 프로토콜입니다. telnet포트가 명령 행에서 주어진다면 유틸리티는 프로토콜의 동작을 해제합니다. 그런 다음 netcat줄 끝 감지와 같이 동작 합니다.
rexkogitans

포트 스캐닝을 암시하지 않는보다 운영 체제와 무관 한 질문은 unix.stackexchange.com/questions/499694 입니다.
JdeBP

답변:


23

Bash Shell을 사용하는 경우 해당 기능을 사용하여 포트가 열려 있는지 또는 닫혀 있는지 확인할 수 있습니다.

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

1 초 후에 서버가 응답하지 않으면 시간 종료에 도달하면 명령이 '중단되어 아무 것도 인쇄되지 않습니다.


5
아마도 질문 대신 호스트 이름 (kafka02)을 사용해야 127.0.0.1하므로 루프백에서만 작동하는 것처럼 보입니다.
Dmitry Grigoryev

1
(timeout 1 bash -c '</dev/tcp/www.google.com/444 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null나를 위해 아무것도 인쇄하지 않습니다. (timeout 1 bash -c '</dev/tcp/www.google.com/444' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/null예상대로 작동했습니다 (PORT CLOSED 인쇄). 의 위치를 ​​적어 둡니다 '.
thecarpy

당신이 bash -c '</ dev / tcp / kafka01 / 6667'에서
얻는 것

그런 다음 $? (0이면 포트가 열려 있음)
yael

IIRC이 bash 기능은 얼마 전에 데비안에서 비활성화되었습니다. 깔끔한 트릭이지만 항상 작동하지는 않습니다.
AnonymousLurker

32

netcat은 하나의 옵션입니다.

nc -zv kafka02 6667
  • -z = 실제로 데몬을 보내지 않고 리스닝 데몬을 스캔하도록 nc를 설정합니다.
  • -v = 상세 모드를 사용합니다.

nc에서 표준 출력을 얻을 수 있습니까? 내 bash 스크립트로 작성하고 싶기 때문에
yael

2
설명서를 읽으십시오! 옵션 nc이 없으면 처럼 동작합니다 telnet.
Henrik-

예, 문서를 읽었지만 -w 플래그가 시간 초과로 작동하지 않습니다
yael

예-c -v -w 1 kafka01 6667 (시간 제한 없음)
yael

nc -v -w 3 kafka01 6667 Ncat : 버전 6.40 ( nmap.org/ncat ) Ncat : 10.164.235.85:6667에 연결되었습니다. (여전히 중단됩니다)
yael

23

골드 표준은 의심 할 여지없이 nmap( nmap.org ), 일반적으로“최상의 결과”를 위해 근본이 필요합니다. 그러나 독립 실행 형 바이너리를 사용할 수 있으며 성능이 저하 된 권한이있는 권한이없는 사용자로 실행할 수 있습니다. 예를 들어, 스텔스 syn스캔 ( -sS) 대신 표준 TCP 연결 스캔 ( -sT)으로 대체됩니다 . 이것은 기능적으로 netcat과 동일하지만 훌륭한 멀티 호스트 속도 향상 기능이 있습니다.

예를 들면 :

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

1
대부분의 조직에서 nmap은 검색 도구로 간주되며 적절한 권한이 없으면 nmap을 사용할 수 없습니다. 또한 EC2 인스턴스 인 경우 AWS의 인증도 필요합니다.
al mamun

4

Perl이 옵션 인 경우 해당 IO::Socket모듈을 사용 하여 특정 호스트 및 포트에 대한 연결을 테스트 할 수 있습니다 . 아래 스크립트는 TCP를 프로토콜로 하드 코딩합니다 (telnet이 사용하는 것입니다).

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

닫힌 포트의 샘플 출력 :

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

열린 포트에서 샘플 출력 :

$ ./above-script kafka02 4200
Success!

2

텔넷 대신 장치 파일 / dev / tcp 및 / dev / udp를 사용할 수 있습니다. 예 : echo 0> /dev/tcp/103.64.35.86/6667. 그런 다음 #echo $?를 사용하여 종료 상태를 확인하십시오. . 종료 상태가 0이면 포트가 열립니다. 종료 상태가 0이 아닌 경우 포트가 닫힙니다. udp 패킷을 확인하려면 echo 0> /dev/udp/103.64.35.86/6667을 사용하십시오.


/ dev / 아래의 redhat 7에는 tcp가 없습니다
yael

ls / dev / tcp / ls : / dev / tcp /에 접근 할 수 없습니다 : 해당 파일이나 디렉토리가 없습니다
yael

어떤 OS에서 테스트합니까?
yael

@yael, ls 동안 / dev / tcp 또는 / dev / udp를 얻지 못합니다. 쉘에서 똑같은 명령을 시도하면 결과가 나타납니다. 그건 그렇고, 나는 그것을 자주 RHEL6,7에서 사용합니다
al mamun

0
ss -lt 

이것은 사용할 수있는 또 다른 명령입니다.


로컬 컴퓨터에서만 작동합니다. 원격 호스트의 열린 포트를 확인하는 것이 문제라고 생각합니다.
Alex Baranowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.