Ping พอร์ตเฉพาะ


671

ตรวจสุขภาพอย่างรวดเร็วที่นี่

คุณสามารถ ping พอร์ตเฉพาะของเครื่องและถ้าเป็นเช่นนั้นคุณสามารถให้ตัวอย่าง?

ping ip address portNumฉันกำลังมองหาสิ่งที่ต้องการ


1
สำหรับ windows คำถามนี้สามารถตรวจสอบได้
npocmaka

คำตอบ:


720

คุณไม่สามารถปิงพอร์ตได้เนื่องจาก Ping กำลังใช้ICMPซึ่งไม่มีแนวคิดของพอร์ต พอร์ตเป็นของโปรโตคอลเลเยอร์การขนส่งเช่น TCP และ UDP อย่างไรก็ตามคุณสามารถใช้nmapเพื่อดูว่าพอร์ตเปิดอยู่หรือไม่

nmap -p 80 example.com

แก้ไข: ตามที่กล่าวถึง flokra, nmap เป็นมากกว่า ping-for-ports-thingy เป็นเพื่อนที่ดีที่สุดของผู้ตรวจสอบความปลอดภัยและแฮ็คเกอร์และมาพร้อมกับตัวเลือกสุดเจ๋งมากมาย ตรวจสอบ doc เพื่อดูค่าสถานะที่เป็นไปได้ทั้งหมด


15
คุณอาจต้องการเพิ่ม-PNข้ามการค้นพบโฮสต์ nmap ก่อนที่จะทำการทดสอบพอร์ตที่กำหนด
flokra

27
ในการบันทึกบางคนมีปัญหา: nmap / can / สามารถติดตั้งบน windows ได้จากลิงค์ (หรือ google nmap windows) แต่มันไม่สามารถใช้งานผ่าน VPN ได้ PaPing ดูเหมือนจะไม่สามารถสแกนช่วงของที่อยู่ได้ ฉันได้โพสต์สคริปต์ Python ด้านล่างซึ่งจะทำงานผ่าน VPN เพื่อสแกนช่วงของพอร์ตในช่วงของที่อยู่

23
สำหรับคนอื่น: ไม่มี nmap บน Mac OS X คุณสามารถติดตั้ง nmap ผ่าน homebrew brew install nmapหรือ MacPorts
Highway of Life

17
nping เหมาะกว่าสำหรับงานนี้มากกว่า nmap nping เป็นส่วนหนึ่งของการกระจาย nmap
CMCDragonkai

6
Mac OSX มี 'Network Utility' ซึ่งมีแท็บเครื่องสแกนพอร์ต
Shanimal

192

เปิดเซสชัน telnet ไปยังพอร์ตเฉพาะเช่น:

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

หากต้องการปิดเซสชั่นของคุณกด+Ctrl]


23
netcatยังใช้งานได้ดีและ verbose น้อย
petrus

3
Telnet ใช้งานได้ดีในกรณีนี้ถ้าพอร์ตเป็นพอร์ต TCP
Falcon Momot

6
netcat ทำงานร่วมกับ UDP ด้วย (nc -u)
Tsvetomir Dimitrov

1
สำหรับผู้ใช้ Mac - netcatตอนนี้เป็น MacOS HighSierra ในตัวซึ่งสามารถติดตั้ง telnet ได้จากbrew install telnet
HomeBrew

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

10
ใช้กับtimeLike ในtime nc -vz www.example.com 80และคุณจะมี RTT เช่นกัน
xebeche

3
โซลูชันเดียวที่ทำงานบนอินสแตนซ์ Amazon EC2 โดยไม่ต้องติดตั้งใด ๆ
Masadow

-z คืออะไร ncat 6.40 on rhel7 ให้ตัวเลือกที่ไม่รู้จัก
Tagar

@Tagar ตามความช่วยเหลือในรุ่น Ubuntu, -z เป็นโหมด Zero-I / O ซึ่งใช้สำหรับการสแกน
Ben Mordecai

88

หากคุณกำลังติดตั้ง windows ด้วย powershell v4 หรือใหม่กว่าคุณสามารถใช้โมดูล power-netconnection powershell ทดสอบ:

Test-NetConnection <host> -port <port>

ตัวอย่าง: ทดสอบ -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 คุณสามารถใช้ cryping ซึ่งมีระยะเวลานานกว่าและรองรับการกระตุกของบริการบางอย่างเช่นเดียวกับพอร์ต

สิ่งนี้สามารถใช้ในการ ping พอร์ตใด ๆ หรือเพียงแค่ 80?
ลุค Puplett

@LukePuplett เพียงแค่เปลี่ยนหมายเลข 80 ในตัวอย่าง รันโดยพิมพ์ paping.exe <hostname / IP> -p <portnumber> -c <จำนวนครั้งที่พยายาม>
David Costa

มันใช้งานได้ดี ใช้-c *สำหรับการ paping อย่างต่อเนื่อง (?)
user2924019


26

ลองใช้curlคำสั่งเช่น:

$ curl host:port

ตัวอย่างเช่น:

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

คำสั่งดังกล่าวจะกลับมาล้มเหลวในรหัสสถานะทางออกที่ไม่ใช่ศูนย์ ในบางกรณีเช่นการตอบสนองที่ว่างเปล่าหรือมีรูปแบบไม่ถูกต้อง (ดูman curl) คุณอาจต้องการจัดการรหัสการออกที่เฉพาะเจาะจงเป็นผลสำเร็จดังนั้นโปรดตรวจสอบรายละเอียดเพิ่มเติมจากโพสต์นี้


3
ฉันชอบสิ่งนี้เพราะcurlเป็นค่าเริ่มต้นบน CentOS ดังนั้นฉันไม่ต้องติดตั้งอะไรเลย
bdemarest

Curl ทำงานกับ Raspberry Pi (distro Raspian)
John M

1
นี่คือทางออกที่ดีที่สุดและเป็นสากล ฉัน tweaked มันเล็กน้อยเพื่อให้มันเป็น 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."
ถนัดมือ Balogh

21

ฉันพบโซลูชันที่ง่ายกว่าโดยใช้ PsPing:

psping 192.168.2.2:5000

มันเป็นส่วนหนึ่งของการใช้ Windows Sysinternals

PsPing ใช้ฟังก์ชั่น Ping, การ ping TCP, เวลาแฝงและแบนด์วิดธ์


1
นอกจากนี้ PsPing ยังมาจากทีม Microsoft SysInternal ดังนั้นจึงอาจได้รับการพิจารณาว่าถูกต้องตามกฎหมายมากกว่านี้เมื่อต้องติดต่อกับคนอื่น ๆ (และมีฟังก์ชั่นการใช้งานที่ดีกว่า PortQry ที่เก่าแก่มาก)
martyvis

PSPing มีข้อได้เปรียบในการให้การวัดเวลาในการตอบสนองเมื่อใช้พอร์ตที่กำหนดเองสิ่งที่ Test-NetConnection ไม่สามารถทำได้ (จะรายงานเวลาตอบสนองของ ICMP เท่านั้น)
Jeff Miles

14

บน Linux คุณสามารถใช้hpingแต่ใช้ TCP แทน ICMP

hping example.com -S -V -p 80

1
hping (hping3 ใน Ubuntu ของฉัน) ยอดเยี่ยม มันทำโพรบซ้ำเป็นระยะเช่นเดียวกับ ping และแตกต่างจากเครื่องมือหลายอย่างที่แนะนำที่นี่ นอกจากนี้ยังทดสอบว่าแพ็กเก็ตผ่านหรือไม่และเปิดพอร์ตหรือไม่ ถ้ามันเปิดคุณจะได้รับflags=SA(เช่น SYN ACK) และถ้ามันถูกปิดคุณจะได้รับflags=SR(เช่น SYN RST) โปรดทราบว่าคุณอาจไม่ต้องการ-Vตั้งค่าสถานะที่นี่ แต่คุณต้องใช้ sudo / root เพื่อเรียกใช้ hping
mc0e

ยอดเยี่ยม! ซึ่งแตกต่างจากคำตอบอื่น ๆ อีกมากมายรายงานนี้เวลาแฝง RTT เช่นเดียวกับการpingปิงจนหยุด
Edward Anderson

11

Ping นั้นเฉพาะเจาะจงมาก แต่ถ้าคุณต้องการตรวจสอบว่าพอร์ตเปิดอยู่หรือไม่และกำลังเรียกใช้กล่อง Windows แล้วPortQryเป็นเพื่อนของคุณ

ฉันใช้มันเพื่อทดสอบ Domain Controllers สำหรับปัญหาการเชื่อมต่อเท่านั้น แต่ก็ใช้งานได้ดีดังนั้นควรใช้กับคุณ


1
PortQry เปิดตัวครั้งแรกในปี 1999/2000 โดยทีม MS Exchange แต่รุ่นล่าสุดของ MS ดูเหมือนจะมีลักษณะแคระแกรนโดยการลบความสามารถในการค้นหาพอร์ตระยะไกล (สุขภาพและความปลอดภัย)
ลุค 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

เลขที่

ไม่มีการรับประกันว่าบริการที่ทำงานบนพอร์ตจะเข้าใจการปิง นอกจากนี้ยังเปิดคำถามเกี่ยวกับ "รส" ของพอร์ตที่คุณต้องการ ping, TCP หรือ UDP เนื่องจากโปรโตคอล "ping" ใช้ไม่ได้เลย (ping ใช้งานโดยใช้ICMP ) จึงไม่สมเหตุสมผลนัก


4

ฉันค่อนข้างแน่ใจว่า Nagios check_tcp probe ทำสิ่งที่คุณต้องการ พวกเขาสามารถพบได้ที่นี่และแม้ว่าได้รับการออกแบบมาเพื่อใช้ในบริบท 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

นี่เป็นทางออกเดียวที่ใช้งานได้กับ VPN กับเครื่องไคลเอนต์ที่เป็น Windows Vista หรือ Windows 7เนื่องจากคำตอบอื่น ๆ ที่ระบุไว้ไม่สามารถใช้งานได้ คำตอบนี้ถูกลบไปก่อนหน้านี้แล้วและไม่ควรเป็นเพราะนี่เป็นทางออกเดียวสำหรับกรณีทั่วไปที่เกิดขึ้นจริง เนื่องจากไม่มีการอุทธรณ์สำหรับการลบฉันจึงทำการโพสต์ใหม่เพื่อบันทึกความยุ่งยากที่ฉันมีเมื่อพยายามใช้คำตอบอื่น ๆ

ตัวอย่างด้านล่างพบว่า IP ใดบน VPN ที่มี VNC / พอร์ต 5900 เปิดพร้อมกับไคลเอนต์ที่ทำงานบน Windows 7

สคริปต์ Python (v2.6.6) สั้น ๆ เพื่อสแกนรายการ IP และพอร์ตที่กำหนด:

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.

ตัวแปรสี่ตัวที่อยู่ด้านบนจะต้องเปลี่ยนให้เหมาะสมกับการหมดเวลาเครือข่ายโฮสต์และพอร์ตที่จำเป็น 5.0 วินาทีบน VPN ของฉันดูเหมือนจะเพียงพอที่จะทำงานอย่างถูกต้องสม่ำเสมอไม่น้อย (เสมอ) ให้ผลลัพธ์ที่แม่นยำ ในเครือข่ายท้องถิ่นของฉัน 0.5 มีมากเกินพอ


2
ทำงานได้อย่างสมบูรณ์บนไคลเอนต์ Win 7 XP Pro / Win Server 2008 R2 เพื่อวิเคราะห์พอร์ตที่ปิด (ผมใช้เกณฑ์หมดเวลา 30 วินาที แต่อาจจะมีปัญหากับสภาพแวดล้อมเซิร์ฟเวอร์ที่ระบุไม่ได้เป็นปัญหาที่มีรหัสนี้)
เดวิด Zemens


1

ใน Bash shell คุณสามารถใช้ไฟล์ 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" ซึ่งเป็น GUI สำหรับ nmap และมีโปรไฟล์การสแกนที่มีประโยชน์มากมายซึ่งเป็นประโยชน์อย่างมากสำหรับผู้ใช้ใหม่


Zenmap ยังมีให้สำหรับ windows
Nick Young
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.