특정 포트 핑


671

여기에 빠른 위생 검사가 있습니다.

머신의 특정 포트를 핑 (ping) 할 수 있습니까? 그렇다면 그렇다면 예제를 제공 할 수 있습니까?

같은 것을 찾고 ping ip address portNum있습니다.


1
windows의 경우이 질문을 확인할 수 있습니다
npocmaka

답변:


720

Ping은 포트 개념이없는 ICMP 를 사용하므로 포트를 핑할 수 없습니다 . 포트는 TCP 및 UDP와 같은 전송 계층 프로토콜 에 속합니다 . 그러나 nmap 을 사용 하여 포트가 열려 있는지 여부를 확인할 수 있습니다

nmap -p 80 example.com

편집 : flokra가 언급했듯이 nmap은 단순한 포트 핑 이상입니다. 보안 감사 및 해커의 가장 친한 친구이며 수많은 멋진 옵션이 제공됩니다. 문서에 가능한 모든 플래그가 있는지 확인하십시오.


15
-PN주어진 포트를 테스트하기 전에 nmap이 일반적으로 수행하는 호스트 검색을 건너 뛰 도록 추가 할 수 있습니다 .
flokra

27
nmap / can / 링크 (또는 google nmap windows) 에서 Windows에 설치할 수 있지만 VPN을 통해 작동하지 않는 사람들이 있습니다. PaPing에서 다양한 주소를 스캔 할 수없는 것 같습니다. 아래에서 Python을 통해 VPN을 통해 다양한 주소의 포트를 스캔합니다.

23
기타 : Mac OS X에 nmap이 없으면 homebrew brew install nmap또는 MacPorts 를 통해 nmap을 설치할 수 있습니다 .
생명의 고속도로

17
nmap보다 nping이이 작업에 더 적합합니다. nping은 nmap 배포의 일부입니다.
CMCDragonkai

6
Mac OSX에는 포트 스캐너 탭이있는 '네트워크 유틸리티'가 있습니다
Shanimal

192

특정 포트에 대한 텔넷 세션을 엽니 다 (예 :

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

세션을 닫으려면 Ctrl+를 누르십시오 ].


23
netcat또한 훌륭하게 작동하며 덜 장황합니다.
petrus

3
포트가 TCP 포트 인 경우 텔넷이이를 위해 잘 작동합니다.
Falcon Momot

6
netcat은 UDP에서도 작동합니다 (nc -u)
Tsvetomir Dimitrov

1
Mac 사용자 - netcat이제 내장되어 텔넷이 사제에서 설치할 수있는 것을 특징으로 맥 OS HighSierra,brew install telnet
sandiejat

98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

10
timein time nc -vz www.example.com 80과 같이 사용 하면 RTT도 있습니다.
xebeche

3
설치하지 않고 Amazon EC2 인스턴스에서 작동하는 단독 솔루션.
Masadow

-z 란 무엇입니까? rhel7의 ncat 6.40은 알 수없는 옵션입니다
Tagar

Ubuntu 버전의 도움말에 따라 @Tagar는 -z는 스캔에 사용되는 Zero-I / O 모드입니다.
벤 Mordecai

88

powershell v4 이상이 설치된 Windows 설치 인 경우 test-netconnection powershell 모듈을 사용할 수 있습니다.

Test-NetConnection <host> -port <port>

예 : Test-NetConnection example.com -port 80

이 cmdlet에는 별칭도 tnc있습니다. 예 :tnc example.com -port 80


80

PaPing을 사용할 수 있습니다 :

http://code.google.com/p/paping

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms

1
또는 paping 대신 훨씬 오래 지속되고 일부 서비스 및 포트의 ping을 지원하는 cryping을 사용할 수 있습니다.

포트를 80 번이나 핑하는 데 사용할 수 있습니까?
Luke Puplett

@LukePuplett은 예제에서 숫자 80을 변경합니다. paping.exe <hostname / IP> -p <portnumber> -c <시도 횟수>를 입력하여 실행하십시오.
David Costa

이것은 잘 작동합니다. 사용 -c *일정 papinging을 위해 (?).
user2924019


26

다음 curl과 같은 명령을 시도하십시오 .

$ curl host:port

예를 들면 다음과 같습니다.

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

위의 명령은 0이 아닌 종료 상태 코드에서 실패 를 반환 합니다. 비어 있거나 잘못된 응답 ( man curl) 과 같은 특정 경우에는 특정 종료 코드를 처리하는 것이 좋을 수 있으므로 자세한 내용은이 게시물 을 확인하십시오 .


3
curlCentOS에는 기본적으로 존재 하기 때문에 이것을 좋아하므로 아무것도 설치할 필요가 없습니다.
bdemarest

curl은 Raspberry Pi (distro Raspian)에서 일했습니다
John M

1
이것은 지금까지 가장 우아하고 보편적 인 솔루션입니다. 나는 그것을 깔끔한 oneliner로 만들기 위해 약간 조정 :IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
Lefty G Balogh

21

PsPing을 사용하여 더 간단한 솔루션을 찾았습니다.

psping 192.168.2.2:5000

Windows Sysinternals 의 일부입니다 .

PsPing은 Ping 기능, TCP ping, 대기 시간 및 대역폭 측정을 구현합니다.


1
또한 PsPing은 Microsoft SysInternal 팀에서 제공되므로 다른 Microsoft 지향적 인 사람들을 상대 할 때 조금 더 합법적 인 것으로 간주 될 수 있습니다. (그리고 아주 오래된 PortQry보다 더 나은 기능을 가지고 있습니다)
martyvis

PSPing은 Test-NetConnection이 할 수없는 사용자 지정 포트를 사용할 때 대기 시간 측정 기능을 제공한다는 이점이 있습니다 (ICMP 응답 시간 만보고 함).
Jeff Miles

14

Linux에서는 hping 을 사용할 수 있지만 ICMP 대신 TCP를 사용합니다.

hping example.com -S -V -p 80

1
hping (내 우분투의 hping3)이 우수합니다. 여기에 제안 된 많은 도구와 달리 핑처럼 프로브를 주기적으로 반복합니다. 또한 패킷 통과 여부와 포트가 열려 있는지 테스트합니다. 열려 있으면 flags=SA(예 : SYN ACK) 닫히면 닫습니다 flags=SR(예 : SYN RST). 당신은 아마도 필요는 없습니다 -V여기에 플래그를,하지만 당신은 HPING을 실행 sudo는 / 루트 필요합니까.
mc0e

우수한! 다른 많은 답변과 달리이 방법은 RTT 대기 시간 ping과 핑이 중지 될 때까지 보고합니다 .
Edward Anderson

11

Ping은 매우 구체적이지만 포트가 열려 있는지 여부를 확인하고 Windows 상자를 실행하려면 PortQry 가 친구입니다.

연결 문제에 대해 도메인 컨트롤러를 테스트하는 데만 사용했지만 문제를 해결 했으므로 도움이 될 것입니다.


1
PortQry는 원래 MS Exchange 팀에 의해 1999/2000 년에 릴리스되었지만 MS 최신 버전은 원격 포트 (상태 및 안전)를 쿼리하는 기능을 제거하여이 기능을 방해 한 것으로 보입니다.
Luke Puplett

8

빠르고 더러운 .NET 콘솔 앱은 다음과 같습니다.

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }

5

아니.

포트에서 실행되는 서비스가 핑을 이해한다고 보장 할 수 없습니다. 또한 핑, TCP 또는 UDP 포트의 "향기"에 대한 질문을 엽니 다. 핑 "프로토콜"은 어느 것도 사용하지 않기 때문에 (핑은 ICMP를 사용하여 구현 됨 ), 많은 의미가 없습니다.


4

Nagios check_tcp 프로브가 원하는 것을 수행한다고 확신합니다. 여기 에서 찾을 수 있으며 Nagios 컨텍스트에서 사용하도록 설계되었지만 모두 독립형 프로그램입니다.

$ ./check_tcp -H host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000

4

이것은 나열된 다른 답변이 단순히 작동하지 않기 때문에 클라이언트 시스템이 Windows Vista 또는 Windows 7VPN에서 작동 하는 유일한 솔루션입니다 . 이 답변은 이전에 삭제되었으며 실제 사례에 대한 유일한 솔루션이므로 삭제해서는 안됩니다. 삭제에 대한 항소가 없기 때문에 다른 답변을 사용하려고했을 때의 좌절을 다른 사람들을 구하기 위해 다시 게시하고 있습니다.

아래 예는 VPN에서 VNC / 포트 5900이 Windows 7에서 실행되는 클라이언트로 열려있는 IP를 찾습니다.

주어진 IP 및 포트 목록을 스캔하는 간단한 Python (v2.6.6) 스크립트 :

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        elif ( 10035 == result ):
            #do nothing, was a timeout, probably host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

결과는 다음과 같습니다.

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

상단의 4 가지 변수는 필요한 시간 초과, 네트워크, 호스트 및 포트에 맞게 변경해야합니다. VPN에서 5.0 초만으로도 일관되게 제대로 작동하기에 충분했지만 정확한 결과를 얻지 못했습니다. 내 로컬 네트워크에서 0.5 이상으로 충분했습니다.


2
Win 7 XP Pro 클라이언트 / Win Server 2008 R2에서 완벽하게 작동하여 닫힌 포트를 진단합니다. (I 30 초 시간 제한 임계 값을 사용했다하지만 특정 서버 환경에 문제가없는 코드에 문제가있을 수 있습니다)
데이비드 Zemens


1

Bash 쉘에서 TCP 의사 장치 파일을 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

다음은 1 초의 시간 초과를 구현하는 버전입니다.

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed

0

* nix 운영 체제를 실행중인 경우 "zenmap"을 설치하고 사용하려고하면 nmap 용 GUI이며 몇 가지 유용한 스캔 프로파일이있어 새 사용자에게 큰 도움이됩니다.


Zenmap은 Windows에서도 사용할 수 있습니다.
Nick Young
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.