Ping một cổng cụ thể


671

Chỉ cần kiểm tra vệ sinh nhanh chóng ở đây.

Bạn có thể ping một cổng cụ thể của máy không, và nếu vậy, bạn có thể cung cấp một ví dụ không?

Tôi đang tìm kiếm một cái gì đó như ping ip address portNum.


1
đối với cửa sổ câu hỏi này có thể được kiểm tra
npocmaka

Câu trả lời:


720

Bạn không thể ping cổng, vì Ping đang sử dụng ICMP không có khái niệm về cổng. Các cổng thuộc về các giao thức lớp vận chuyển như TCP và UDP. Tuy nhiên, bạn có thể sử dụng nmap để xem các cổng có mở hay không

nmap -p 80 example.com

Chỉnh sửa: Như flokra đã đề cập, nmap không chỉ là một ping-for-port-thingy. Đó là người bạn tốt nhất của kiểm toán viên và tin tặc và đi kèm với vô số lựa chọn thú vị. Kiểm tra tài liệu cho tất cả các cờ có thể.


15
Bạn có thể muốn thêm -PNđể bỏ qua nmap khám phá máy chủ thường làm trước khi kiểm tra cổng đã cho.
flokra

27
Để cứu một số người một số rắc rối: nmap / can / được cài đặt trên windows từ liên kết (hoặc google nmap windows), NHƯNG nó không hoạt động trên VPN. PaPing dường như không thể quét một loạt địa chỉ. Tôi đã đăng tập lệnh Python bên dưới sẽ hoạt động trên VPN để quét một loạt các cổng trên một loạt địa chỉ.

23
Đối với những người khác: nmap không tồn tại trên Mac OS X, bạn có thể cài đặt nmap qua homebrew brew install nmaphoặc MacPorts.
Quốc lộ

17
nping phù hợp hơn cho nhiệm vụ này hơn nmap. nping là một phần của phân phối nmap.
CMCDragonkai

6
Mac OSX có 'Network Utility' có tab quét cổng
Shanimal

192

Mở một phiên telnet đến cổng cụ thể, ví dụ:

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

Để đóng phiên của bạn, nhấn Ctrl+ ].


23
netcatcông trình cũng tuyệt vời và ít dài dòng.
petrus

3
Telnet hoạt động tốt cho iff này, cổng là cổng TCP.
Falcon Momot

6
netcat cũng hoạt động với UDP (nc -u)
Tsvetomir Dimitrov

1
Đối với người dùng Mac - netcathiện đã được tích hợp sẵn MacOS HighSierra, trong đó telnet có thể được cài đặt từ brew install telnet
HomeBrew

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

10
Sử dụng với timelike trong time nc -vz www.example.com 80và bạn cũng sẽ có một loại RTT.
xebeche

3
Giải pháp duy nhất hoạt động trên các phiên bản Amazon EC2 mà không cần cài đặt.
Masadow

-z là gì? ncat 6.40 trên rhel7 cung cấp cho nó một tùy chọn không xác định
Tagar

@Tagar theo trợ giúp trong phiên bản Ubuntu, -z là chế độ Zero-I / O, được sử dụng để quét.
Ben Mordecai

88

Nếu bạn đang cài đặt windows với powershell v4 hoặc mới hơn, bạn có thể sử dụng mô-đun powershell kết nối mạng thử nghiệm:

Test-NetConnection <host> -port <port>

Ví dụ: Test-NetConnection example.com -port 80

Lệnh ghép này cũng có bí danh tnc. Ví dụtnc example.com -port 80


80

Bạn có thể sử dụng PaPing:

http://code.google.com.vn/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
Hoặc thay vì tạo hình, bạn có thể sử dụng cryping đã tồn tại lâu hơn nhiều và hỗ trợ ping một số dịch vụ cũng như cổng.

Điều này có thể được sử dụng để ping bất kỳ cổng hoặc chỉ 80?
Luke Puplett

@LukePuplett chỉ cần thay đổi số 80 trong ví dụ. Chạy nó bằng cách nhập paping.exe <hostname / IP> -p <portnumber> -c <số lần thử>
David Costa

Điều này làm việc tuyệt vời. sử dụng -c *để tạo hình liên tục (?).
user2924019

26

Không, bạn không thể, bởi vì pingsử dụng giao thức ICMP , thậm chí không có khái niệm về cổng.


47
Tôi khá chắc chắn rằng việc sử dụng "ping" là ẩn dụ.
Luke Puplett

26

Hãy thử curllệnh, như:

$ curl host:port

Ví dụ:

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

Lệnh trên sẽ trả về Fail trên mã trạng thái thoát khác không. Trong một số trường hợp cụ thể, chẳng hạn như phản hồi trống hoặc không đúng định dạng (xem man curl), bạn có thể muốn xử lý các mã thoát cụ thể là thành công, vì vậy vui lòng kiểm tra bài đăng này để được giải thích chi tiết hơn.


3
Tôi thích điều này vì curlhiện diện theo mặc định trên CentOS, vì vậy tôi không phải cài đặt bất cứ thứ gì.
bdemomon

curl làm việc trên Raspberry Pi (distro Raspian)
John M

1
Đây là giải pháp thanh lịch và phổ quát nhất. Tôi tinh chỉnh nó một chút để biến nó thành một oneliner gọn gàng: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

Tôi tìm thấy một giải pháp đơn giản hơn bằng cách sử dụng PsPing:

psping 192.168.2.2:5000

Đây là một phần của Windows Sysiternals .

PsPing thực hiện chức năng Ping, ping TCP, độ trễ và đo băng thông.


1
Ngoài ra PsPing đến từ nhóm Microsoft SysI Internalal nên có thể được coi là hợp pháp hơn một chút khi giao dịch với những người định hướng khác của Microsoft. (Và có chức năng tốt hơn so với PortQry rất cũ)
martyvis

PSPing có lợi thế là cung cấp phép đo độ trễ khi sử dụng cổng tùy chỉnh, điều mà Test-NetConnection không thể thực hiện (nó chỉ báo cáo thời gian phản hồi ICMP).
Jeff Miles

14

Trên Linux, bạn có thể sử dụng hping nhưng nó sử dụng TCP, thay vì ICMP.

hping example.com -S -V -p 80

1
hping (hping3 trong ubfox của tôi) là tuyệt vời. Nó định kỳ lặp lại thăm dò như ping, và không giống như nhiều công cụ được đề xuất ở đây. Nó cũng kiểm tra cả liệu gói có được thông qua hay không và cổng có mở không. Nếu nó mở, bạn sẽ nhận được flags=SA(tức là SYN ACK) và nếu nó đóng, bạn sẽ nhận được flags=SR(tức là SYN RST). Lưu ý rằng bạn có thể không cần -Vcờ ở đây, nhưng bạn cần sudo / root để chạy hping.
mc0e

Xuất sắc! Không giống như nhiều câu trả lời khác, điều này báo cáo độ trễ RTT như pingvà ping cho đến khi dừng lại.
Edward Anderson

11

Ping rất cụ thể nhưng nếu bạn muốn kiểm tra xem một cổng có mở hay không và đang chạy một hộp Windows thì PortQry là bạn của bạn.

Tôi chỉ sử dụng nó để kiểm tra Bộ kiểm soát miền cho các vấn đề kết nối, nhưng nó đã xử lý được vấn đề đó, vì vậy sẽ hiệu quả với bạn.


1
PortQry ban đầu được phát hành vào năm 1999/2000 bởi nhóm MS Exchange nhưng phiên bản gần đây của MS dường như đã cản trở nó bằng cách loại bỏ khả năng truy vấn các cổng từ xa (sức khỏe & an toàn).
Luke Puplett

8

Đây là một ứng dụng bảng điều khiển .NET nhanh và bẩn:

    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

Không.

Không có gì đảm bảo rằng dịch vụ chạy trên cổng hiểu được ping. Nó cũng mở ra câu hỏi về "hương vị" nào của cổng bạn muốn ping, TCP hoặc UDP? Vì "giao thức" ping không sử dụng (ping được thực hiện bằng ICMP ), nên nó không có nhiều ý nghĩa.


4

Tôi khá chắc chắn rằng thăm dò Nag_t check_tcp làm những gì bạn muốn. Chúng có thể được tìm thấy ở đây và mặc dù được thiết kế để sử dụng trong bối cảnh Nagios, nhưng tất cả chúng đều là các chương trình độc lập.

$ ./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

Đây là giải pháp duy nhất hoạt động cho VPN với máy khách là Windows Vista hoặc Windows 7 , vì các câu trả lời được liệt kê khác đơn giản là không hoạt động. Câu trả lời này đã bị xóa trước đây và không nên có, vì đây là giải pháp duy nhất cho một trường hợp phổ biến trong thế giới thực. Vì không có kháng cáo có sẵn cho việc xóa, tôi đang đăng lại nó để cứu người khác sự thất vọng mà tôi đã có khi cố gắng sử dụng các câu trả lời khác.

Ví dụ dưới đây tìm thấy IP nào trên VPN có VNC / port 5900 mở với máy khách đang chạy trên Windows 7.

Tập lệnh Python ngắn (v2.6.6) để quét danh sách IP và Cổng đã cho:

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."

Kết quả trông giống như:

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.

Bốn biến ở trên cùng sẽ cần phải được thay đổi để phù hợp với bất kỳ thời gian chờ, mạng, máy chủ và cổng nào cần thiết. 5,0 giây trên VPN của tôi dường như đủ để hoạt động ổn định, ít (không) luôn cho kết quả chính xác. Trên mạng cục bộ của tôi, 0,5 là quá đủ.


2
Hoạt động hoàn hảo trên Win 7 XP Pro client / Win Server 2008 R2 để chẩn đoán cổng đóng. (Tôi đã phải sử dụng ngưỡng thời gian chờ 30 giây nhưng đó có thể là sự cố với môi trường máy chủ cụ thể không phải là vấn đề với mã này)
David Zemens


1

Trong shell Bash, bạn có thể sử dụng tệp giả thiết bị TCP , ví dụ:

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

Đây là phiên bản thực hiện thời gian chờ là 1 giây:

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

0

Nếu bạn đang chạy hệ điều hành * nix, hãy thử cài đặt và sử dụng "zenmap", đó là GUI cho nmap và có một số cấu hình quét hữu ích giúp ích rất nhiều cho người dùng mới.


Zenmap cũng có sẵn cho các cửa sổ.
Nick Young
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.