ฉันจะตรวจสอบได้อย่างไรว่าพอร์ตเปิดอยู่บนเซิร์ฟเวอร์ Windows หรือไม่ [ปิด]


478

ฉันกำลังพยายามติดตั้งไซต์ภายใต้พอร์ตอื่นบนเซิร์ฟเวอร์ แต่พอร์ตอาจถูกปิดโดยไฟร์วอลล์ มีวิธีการ ping out หรือ in, บนพอร์ตเฉพาะ, เพื่อดูว่ามันเปิดอยู่หรือไม่?


คำตอบ:


732

สมมติว่าเป็นพอร์ต TCP (แทน UDP) ที่คุณพยายามใช้:

  1. บนเซิร์ฟเวอร์เองใช้netstat -anเพื่อตรวจสอบเพื่อดูพอร์ตที่กำลังฟังอยู่

  2. จากภายนอกเพียงใช้telnet host port(หรือtelnet host:portในระบบ Unix) เพื่อดูว่าการเชื่อมต่อถูกปฏิเสธยอมรับหรือหมดเวลา

ในการทดสอบหลังนั้นโดยทั่วไปแล้ว:

  • การเชื่อมต่อถูกปฏิเสธหมายความว่าไม่มีสิ่งใดทำงานบนพอร์ตนั้น
  • ได้รับการยอมรับหมายความว่ามีบางสิ่งทำงานบนพอร์ตนั้น
  • การหมดเวลาหมายความว่าไฟร์วอลล์กำลังบล็อกการเข้าถึง

ใน Windows 7 หรือ Windows Vista ตัวเลือกเริ่มต้น 'telnet' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ทำงานได้หรือไฟล์แบตช์ เพื่อแก้ปัญหานี้เพียงแค่เปิดใช้งาน: คลิก * เริ่ม ** → แผงควบคุมโปรแกรมเปิดหรือปิดคุณสมบัติ Windows ในรายการให้เลื่อนลงและเลือกไคลเอ็นต์ TelnetOKและคลิก


312
ใน Win7 หรือ Vista defaul ตัวเลือก 'telnet' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ทำงานได้หรือไฟล์แบตช์ เพื่อแก้ปัญหานี้เพียงแค่เปิดใช้งาน: คลิกเริ่ม, แผงควบคุม, โปรแกรมแล้วเปิดหรือปิดคุณสมบัติ Windows ในรายการเลื่อนลงและเลือกไคลเอ็นต์ Telnet และคลิกตกลง
ดู

12
@PankajKohli ใช้ฉาบลูกค้า Telnet แทน ไม่จำเป็นต้องติดตั้ง
Colin Pickard

52
อะไรCould not open connection to the host, on port *x*: Connect failedบ่งบอก?
Kenny Evitt

2
@Alnitak ฉันแค่ต้องการตรวจสอบเพราะฉันคิดว่านี่ตอบคำถามของฉันแล้ว เมื่อฉันtelnet api-3t.sandbox.paypal.com 443ได้รับConnecting to api-3t.sandbox.paypal.com...Could not open connection to the host on port 443: Connect failedนี่เป็นเพราะไฟร์วอลล์กำลังปิดกั้นหรือไม่
Popeye

2
มีความแตกต่างถ้าคุณเปิด telnet.exe แล้วพิมพ์o host portvs บรรทัดคำสั่งเปิด (cmd.exe) แล้วพิมพ์telnet host port
Pawel Cioch

185

บน Windows คุณสามารถใช้

netstat -na | find "your_port"

เพื่อ จำกัด ผลลัพธ์ให้แคบลง นอกจากนี้คุณยังสามารถกรองLISTENING, ESTABLISHED, TCPและเช่น คิดว่ามันเป็นกรณี ๆ ไป


4
คุณไม่สามารถใช้ค้นหาแบบนี้มันจะทำการค้นหาไฟล์คุณควรใช้ grep
Moataz Elmasry

38
@MoatazElmasry นั่นเป็นความจริงบน Linux แต่นี่เป็นเซิร์ฟเวอร์ Windows ที่ find เป็นคำสั่งที่ถูกต้อง Grep ไม่พร้อมใช้งานบน Windows ฉันเพิ่งรันคำสั่งที่ระบุไว้ที่นี่และมันทำงานได้อย่างสมบูรณ์
Ben Wyatt

4
เมื่อฉันใช้คำสั่งนั่นคือ netstat -an | ค้นหา "19345" ฉันไม่ได้รับผลลัพธ์ใด ๆ มันหมายความว่าอะไร?
nanosoft

14
findไม่ได้ทำงานใน Windows 10 สำหรับฉัน แต่netstat -na | findstr "8080"ทำงาน
อรุณ

6
ไม่มีอะไรเกิดขึ้นไม่ใช่กับ find หรือ findstr
ประโยชน์ 18

83

หากคุณกำลังตรวจสอบจากภายนอกไม่ใช่จากเซิร์ฟเวอร์และคุณไม่ต้องการรบกวนการติดตั้ง telnet (เนื่องจากไม่มี Windows รุ่นล่าสุด) หรือซอฟต์แวร์อื่น ๆ แสดงว่าคุณมี PowerShell ดั้งเดิมอยู่:

Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed

(น่าเสียดายที่นี่ใช้งานได้กับ PowerShell 4.0 หรือใหม่กว่าเท่านั้นในการตรวจสอบรุ่น PowerShell ของคุณให้พิมพ์ $PSVersionTable )

PS: หมายเหตุวันนี้มีข้อเรียกร้องบางอย่างเกี่ยวกับ twittersphere ที่บอกเป็นนัยว่าคำตอบนี้อาจได้รับการปรับปรุงโดยกล่าวถึง "การทดสอบการเชื่อมต่อ" จาก PowerShell Core หรือทางลัด "tnc" ดูhttps://twitter.com/david_obrien/status/1214082339203993600และช่วยฉันแก้ไขคำตอบนี้เพื่อปรับปรุงโปรด!


(หากคุณมี PSVersion <4.0 แสดงว่าคุณไม่มีโชคตรวจสอบตารางนี้:

ป้อนคำอธิบายภาพที่นี่

แม้ว่าคุณจะสามารถอัพเกรด PowerShell เวอร์ชั่นของคุณได้ด้วยการติดตั้งWindows Management Framework 4.0แต่ก็ไม่ได้ทำสิ่งที่หลอกลวงสำหรับฉัน แต่การทดสอบ -NetConnection cmdlet ยังไม่พร้อมใช้งาน)


3
นี่คือคำตอบที่ดีที่สุด การติดตั้ง telnet นั้นไม่ได้ส่งตรงไปยังเซิร์ฟเวอร์ของผู้อื่นเสมอไป!
TrojanName

แน่นอนต้องเป็นคำตอบที่ดีที่สุด
QtRoS

1
นี่เป็นตัวเลือกที่น่าเชื่อถือมากกว่า telnet, telnet จะไม่รายงานอะไรเลยในขณะที่รายงานว่ามีพอร์ตในกรณีของฉัน
axk

42

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

portqry -n 11.22.33.44 -p tcp -e 80

4
พอร์ตไฟร์วอลล์โดยทั่วไปจะปรากฏเป็น "กรอง"
dlanod

คุณสามารถใช้เครื่องมือนี้เพื่อตรวจสอบพอร์ต UDP ได้เช่นกันportqry -n 11.22.33.44 -p udp -e 19132
2514 Antony

41

ฉันทำอย่างนั้น:

netstat -an | find "8080" 

จาก telnet

telnet 192.168.100.132 8080

และตรวจสอบให้แน่ใจว่าไฟร์วอลล์ปิดอยู่บนเครื่องนั้น


เมื่อฉันใช้คำสั่งนั่นคือ netstat -an | ค้นหา "19345" ฉันไม่ได้รับผลลัพธ์ใด ๆ มันหมายความว่าอะไร? -
nanosoft

2
หมายความว่าพอร์ตนี้ฟรี
Sarvar Nishonboev

ฉันได้รับข้อผิดพลาดเมื่อฉันรันnetstat -an | find "8080"มันบอกว่าno such file named "8080"
Pragyaditya Das

24

หากtelnetไม่สามารถใช้ได้ดาวน์โหลดฉาบ มันเป็นไคลเอ็นต์ Telnet, SSH และอื่น ๆ ที่เหนือกว่าและจะมีประโยชน์ในหลาย ๆ สถานการณ์ไม่ใช่เพียงแค่เซิร์ฟเวอร์นี้โดยเฉพาะอย่างยิ่งถ้าคุณจัดการเซิร์ฟเวอร์


ใช่ แต่ไม่ใช่สำหรับการวางรหัส Forth ให้พูดด้วยAmForth (ยกเว้นการใช้ PuTTY ร่วมกับEdit Overflow )
Peter Mortensen

13

คุณต้องการเครื่องมือในการทำมันหรือไม่? มีเว็บไซต์เป็นที่http://www.canyouseeme.org/ มิฉะนั้นคุณต้องมีเซิร์ฟเวอร์อื่นเพื่อโทรกลับเพื่อดูว่าพอร์ตเปิดอยู่หรือไม่ ...


12

ใช้สิ่งนี้หากคุณต้องการดูพอร์ตที่ใช้และฟังทั้งหมดบนเซิร์ฟเวอร์ Windows:

netstat -an |find /i "listening"

ดูพอร์ตที่เปิดฟังและสร้างขึ้นทั้งหมด:

netstat -a

7

บน Windows Server คุณสามารถใช้

netstat -an | where{$_.Contains("Yourport")}

ไม่ได้แก้ไขปัญหาไฟร์วอลล์ในทางใดทางหนึ่ง
มาร์ควิสแห่ง Lorne

5
สิ่งนี้ใช้ได้กับ powershell
Paco Zarate

หรือคุณหมายถึง "เซิร์ฟเวอร์ Windows"
Peter Mortensen



1

นี่คือสิ่งที่ทำงานให้ฉัน:

  • เปิดพรอมต์คำสั่ง
  • ชนิด telnet
  • Microsoft Telnet> เปิด <ชื่อโฮสต์หรือที่อยู่ IP> <space> <port>

มันจะยืนยันว่าพอร์ตถูกเปิด


0

ยูทิลิตี้อื่นที่ฉันพบและดีและเล็กเช่นกันคือPortQry Command Line Port Scanner เวอร์ชัน 2.02.0

คุณสามารถ ping เซิร์ฟเวอร์และพอร์ตและมันจะบอกสถานะของพอร์ต มีโปรแกรมอรรถประโยชน์บรรทัดคำสั่งและ UI สำหรับมัน

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