ฉันกำลังพยายามติดตั้งไซต์ภายใต้พอร์ตอื่นบนเซิร์ฟเวอร์ แต่พอร์ตอาจถูกปิดโดยไฟร์วอลล์ มีวิธีการ ping out หรือ in, บนพอร์ตเฉพาะ, เพื่อดูว่ามันเปิดอยู่หรือไม่?
ฉันกำลังพยายามติดตั้งไซต์ภายใต้พอร์ตอื่นบนเซิร์ฟเวอร์ แต่พอร์ตอาจถูกปิดโดยไฟร์วอลล์ มีวิธีการ ping out หรือ in, บนพอร์ตเฉพาะ, เพื่อดูว่ามันเปิดอยู่หรือไม่?
คำตอบ:
สมมติว่าเป็นพอร์ต TCP (แทน UDP) ที่คุณพยายามใช้:
บนเซิร์ฟเวอร์เองใช้netstat -an
เพื่อตรวจสอบเพื่อดูพอร์ตที่กำลังฟังอยู่
จากภายนอกเพียงใช้telnet host port
(หรือtelnet host:port
ในระบบ Unix) เพื่อดูว่าการเชื่อมต่อถูกปฏิเสธยอมรับหรือหมดเวลา
ในการทดสอบหลังนั้นโดยทั่วไปแล้ว:
ใน Windows 7 หรือ Windows Vista ตัวเลือกเริ่มต้น 'telnet' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ทำงานได้หรือไฟล์แบตช์ เพื่อแก้ปัญหานี้เพียงแค่เปิดใช้งาน: คลิก * เริ่ม ** → แผงควบคุม → โปรแกรม → เปิดหรือปิดคุณสมบัติ Windows ในรายการให้เลื่อนลงและเลือกไคลเอ็นต์ TelnetOKและคลิก
Could not open connection to the host, on port *x*: Connect failed
บ่งบอก?
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
นี่เป็นเพราะไฟร์วอลล์กำลังปิดกั้นหรือไม่
o host port
vs บรรทัดคำสั่งเปิด (cmd.exe) แล้วพิมพ์telnet host port
บน Windows คุณสามารถใช้
netstat -na | find "your_port"
เพื่อ จำกัด ผลลัพธ์ให้แคบลง นอกจากนี้คุณยังสามารถกรองLISTENING
, ESTABLISHED
, TCP
และเช่น คิดว่ามันเป็นกรณี ๆ ไป
find
ไม่ได้ทำงานใน Windows 10 สำหรับฉัน แต่netstat -na | findstr "8080"
ทำงาน
หากคุณกำลังตรวจสอบจากภายนอกไม่ใช่จากเซิร์ฟเวอร์และคุณไม่ต้องการรบกวนการติดตั้ง 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 ยังไม่พร้อมใช้งาน)
บนเครื่อง Windows คุณสามารถใช้PortQryจาก Microsoft เพื่อตรวจสอบว่ามีแอปพลิเคชันที่กำลังฟังพอร์ตเฉพาะอยู่หรือไม่โดยใช้คำสั่งต่อไปนี้:
portqry -n 11.22.33.44 -p tcp -e 80
portqry -n 11.22.33.44 -p udp -e 19132
ฉันทำอย่างนั้น:
netstat -an | find "8080"
จาก telnet
telnet 192.168.100.132 8080
และตรวจสอบให้แน่ใจว่าไฟร์วอลล์ปิดอยู่บนเครื่องนั้น
netstat -an | find "8080"
มันบอกว่าno such file named "8080"
หากtelnet
ไม่สามารถใช้ได้ดาวน์โหลดฉาบ มันเป็นไคลเอ็นต์ Telnet, SSH และอื่น ๆ ที่เหนือกว่าและจะมีประโยชน์ในหลาย ๆ สถานการณ์ไม่ใช่เพียงแค่เซิร์ฟเวอร์นี้โดยเฉพาะอย่างยิ่งถ้าคุณจัดการเซิร์ฟเวอร์
ใช้สิ่งนี้หากคุณต้องการดูพอร์ตที่ใช้และฟังทั้งหมดบนเซิร์ฟเวอร์ Windows:
netstat -an |find /i "listening"
ดูพอร์ตที่เปิดฟังและสร้างขึ้นทั้งหมด:
netstat -a
บน Windows Server คุณสามารถใช้
netstat -an | where{$_.Contains("Yourport")}
การ PsPingจาก Sysinternals ก็ดีมากเช่นกัน
นี่คือสิ่งที่ทำงานให้ฉัน:
telnet
มันจะยืนยันว่าพอร์ตถูกเปิด
ยูทิลิตี้อื่นที่ฉันพบและดีและเล็กเช่นกันคือPortQry Command Line Port Scanner เวอร์ชัน 2.02.0
คุณสามารถ ping เซิร์ฟเวอร์และพอร์ตและมันจะบอกสถานะของพอร์ต มีโปรแกรมอรรถประโยชน์บรรทัดคำสั่งและ UI สำหรับมัน