วิธีการตรวจสอบว่าพอร์ตถูกบล็อคในเครื่อง Windows


105

บนแพลตฟอร์ม Windows ตัวเลือกดั้งเดิมใดที่ฉันต้องตรวจสอบว่าพอร์ต (3306 ตัวอย่าง) บนเครื่องท้องถิ่นของฉัน (เหมือนในlocalhost) กำลังถูกบล็อกหรือไม่


1
เพื่ออธิบายให้ชัดเจนคุณหมายถึงถูกบล็อกในขณะที่ถูกบล็อกโดยไฟร์วอลล์หรือเกตเวย์หรือคุณหมายถึงการใช้งานอย่างอื่นอยู่แล้ว?
squillman

1
การทดสอบAudit My PC Firewallช่วยให้คุณสามารถทดสอบพอร์ตเฉพาะหรือช่วงของพอร์ตจากแหล่งภายนอก
Peter Stuer

คำตอบ:


111

เมื่อคุณอยู่บนเครื่อง Windows สิ่งเหล่านี้สามารถทำได้

  • ดำเนินการคำสั่งต่อไปนี้และค้นหาตัวฟัง ": 3306" (คุณไม่ได้พูดถึง UDP / TCP) สิ่งนี้จะยืนยันว่ามีบางสิ่งที่ทำงานอยู่บนพอร์ต

    netstat -a -n

  • หลังจากนี้หากคุณคาดว่าจะมีการเชื่อมต่อเข้ามาที่พอร์ตนี้และรู้สึกว่าไฟร์วอลล์อาจปิดกั้นพวกเขาคุณสามารถเริ่มการบันทึกไฟร์วอลล์ Windowsและตรวจสอบบันทึกการเชื่อมต่อที่ถูกทิ้ง

    • ไปที่การตั้งค่าขั้นสูงของ Windows Firewall
    • คลิกที่ปุ่มการตั้งค่าถัดจาก "การเชื่อมต่อท้องถิ่น"
    • เลือก "บันทึกแพ็กเก็ตที่ถูกทิ้ง"
    • ดูที่ตำแหน่งไฟล์บันทึก (หากไม่มีอยู่ให้กำหนดอย่างใดอย่างหนึ่ง)
    • คลิกตกลง
    • ตอนนี้เมื่อมีการพยายามเชื่อมต่อ (สมมติว่าคุณรู้เมื่อเสร็จสิ้น) ให้ดูที่ไฟล์บันทึกสำหรับการวางที่พอร์ต 3306
    • หากเห็นสิ่งนี้คุณจะต้องเพิ่มข้อยกเว้นสำหรับพอร์ตนี้
  • มีอีกหนึ่งคำสั่งในการตรวจสอบสถานะไฟร์วอลล์
    (อัปเดตสำหรับผู้ใช้ Windows 7 - ตามที่อ้างถึงNickด้านล่าง - ใช้ไฟร์วอลล์ advfirewall netsh )

    netsh firewall แสดงสถานะ

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

    ไฟร์วอลล์ netsh แสดงการกำหนดค่า


หากคุณมีบล็อกที่ใช้งานอยู่ (การเชื่อมต่อขาเข้ากำลังถูกทิ้งโดยไฟร์วอลล์) หลังจากที่คุณเริ่มการบันทึกคุณจะเห็นว่าในการบันทึก

หากคุณใช้แอพพลิเคชั่น / บริการที่กำลังรับฟัง 3306 การกำหนดค่าไฟร์วอลล์ควรแสดงให้เปิดใช้งาน หากไม่เห็นสิ่งนี้คุณอาจพลาดการเพิ่มข้อยกเว้นกับไฟร์วอลล์เพื่ออนุญาตแอพ / บริการนี้

ในที่สุดพอร์ต 3306 มักใช้กับ MySQL ดังนั้นฉันคิดว่าคุณใช้เซิร์ฟเวอร์ MySQL บนเครื่อง windows นี้ คุณควรเห็นผู้ฟังสำหรับ 3306 ยอมรับการเชื่อมต่อขาเข้า หากคุณไม่เห็นว่าคุณต้องทำงานกับแอปพลิเคชันของคุณ (MySQL) เพื่อเริ่มต้นครั้งแรก


4
+1 สำหรับรายละเอียดที่ดี
Sage

3
เริ่มต้นด้วย Windows Vista คำสั่ง "ไฟร์วอลล์ netsh" ถูกคัดค้าน ขอแนะนำให้คุณใช้ "ไฟร์วอลล์ advfirewall netsh" แทนและอ้างอิงบทความgo.microsoft.com/fwlink/?linkid=121488
Nick DeVore

5
ในการแยกวิเคราะห์เอาต์พุตที่บรรทัดคำสั่งให้เพิ่ม|find "3306"คำสั่งเช่นC:\Windows\System32>netstat -an |find "3306"
Cees Timmerman

ฉันไม่สามารถหาปุ่มตั้งค่าที่ระบุไว้ในขั้นตอนที่ 2 ของคำแนะนำที่สอง ...
Bassie


23

NETSTATจะบอกคุณว่าพอร์ตนั้นกำลังฟังอยู่หรือไม่แต่มันจะไม่บอกคุณถ้าพอร์ตนั้นเปิดให้โลกภายนอก สิ่งที่ฉันหมายถึงคือNETSTATอาจแสดงให้เห็นว่า 0.0.0.0 กำลังฟังอยู่ที่พอร์ต 3306 แต่ไฟร์วอลล์อาจยังบล็อกพอร์ตนั้นซึ่งป้องกันการเชื่อมต่อภายนอก ดังนั้นจึงไม่เพียงพอที่จะพึ่งพาNETSTATเพียงอย่างเดียว

วิธีที่ดีที่สุดในการตรวจสอบว่าพอร์ตถูกบล็อกคือทำการสแกนพอร์ตจากเครื่องไคลเอนต์

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

วิธีทดสอบพอร์ตที่เปิดอยู่ทั้งหมด:

portqry.exe -n #.#.#.#   

วิธีทดสอบพอร์ตเฉพาะ:

portqry.exe -n #.#.#.# -e #

ตัวอย่างเช่นเพื่อทดสอบเว็บอินเตอร์เฟสของเราเตอร์ที่ 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

ผลตอบแทนใด:

TCP port 80 (http service): LISTENING

โดยที่เป็นการทดสอบบนเครื่องโลคัลที่ไม่มี HTTPD กำลังรันส่งคืน:

TCP port 80 (http service): NOT LISTENING

การใช้ยูทิลิตี้ PortScan คุณจะได้รับหนึ่งใน 3 ผลลัพธ์

  • Listening หมายถึงเซิร์ฟเวอร์กำลังฟังบนพอร์ตที่ระบุ
  • Filtered หมายความว่าได้รับแพ็คเก็ต TCP ตอบรับพร้อมชุดการตั้งค่าสถานะใหม่ซึ่งน่าจะบ่งบอกถึงปัญหาไฟร์วอลล์หรือซอฟต์แวร์
  • Not Listening หมายความว่ามันไม่ได้รับคำตอบเลย

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

หากต้องการใช้telnetคุณเพียงแค่ใช้คำสั่งต่อไปนี้จากพรอมต์คำสั่ง:

telnet localhost 3306

คำสั่งข้างต้นควรให้ข้อบ่งชี้อย่างรวดเร็วหากพอร์ต3306ที่localhostตอบสนองอยู่


ฉันดาวน์โหลด PortQryUI และฉันตรวจสอบหลังจากที่ฉันบล็อกและเปิดใช้งานพอร์ต 445 ทั้งใน tcp และ udp มันแสดงการฟังเหมือนกันใน tcp และไม่ฟังใน udp
Liam neesan

17

ตั้งแต่ PowerShell 4.0 คุณสามารถใช้คำสั่ง Test-NetConnection

ถ้าคุณต้องการทดสอบพอร์ต 3306 ในตัวอย่างของคุณคำสั่งคือ

Test-NetConnection -ComputerName localhost -Port 3306

เอกสารประกอบ TechNet Test-NetConnection


+1 สำหรับสิ่งนี้ ทางเลือกที่ดีจริงๆที่ไม่ต้องติดตั้งอะไรบนเครื่อง windows ที่ทันสมัยที่สุด
DCaugs

5

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

โปรดทราบว่าไฟร์วอลล์ในเครื่องของคุณสามารถป้องกันแม้แต่การกระทำแรก


โปรดทราบว่า telnet ไม่ได้ถูกติดตั้งอีกต่อไปบน Win7 และระบบที่ใหม่กว่า
Alexis Wilke

@AlexisWilke ไม่ถูกต้อง สามารถติดตั้ง Telnet ได้
deepdive

4
ในการติดตั้ง telnet จากบรรทัดคำสั่ง: dism / online / Enable-Feature / FeatureName: TelnetClient
Jason Massey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.