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

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

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

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



답변

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


답변

netcat은 하나의 옵션입니다.

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

답변

골드 표준은 의심 할 여지없이 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


답변

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!


답변

텔넷 대신 장치 파일 / 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을 사용하십시오.


답변

ss -lt

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


답변