จะแสดงรายการ Open Ports บน Linux ได้อย่างไร?

How List Open Ports Linux



ในเครือข่าย พอร์ตเป็นคุณลักษณะที่น่าสนใจ เป็นช่องทางสำหรับการรับส่งข้อมูลเครือข่ายเพื่อระบุแอปหรือบริการปลายทาง แต่ละกระบวนการ/บริการได้รับพอร์ตที่ไม่ซ้ำกัน พอร์ตจะเชื่อมโยงกับที่อยู่ IP ของโฮสต์พร้อมกับโปรโตคอลเสมอ

นี่เป็นคำอุปมาที่ฉันชื่นชอบในการอธิบายว่าท่าเรือคืออะไร ลองนึกภาพเรือบรรทุกสินค้าซึ่งจะเดินทางไปยังดินแดนที่ห่างไกล ต้องใช้ข้อมูลอะไรบ้างในการไปถึงที่หมายอย่างถูกต้อง? เพื่อความง่าย สมมติว่าต้องการประเทศ (ที่อยู่ IP) และ ท่า เรือจะเทียบท่า







ในคู่มือนี้ ให้ดูวิธีการแสดงรายการพอร์ตที่เปิดอยู่บน Linux



พอร์ตบน Linux

พอร์ตทำหน้าที่เป็นจุดสิ้นสุดของการสื่อสาร เป็นตัวเลข 16 บิต (0 ถึง 65535 เป็นทศนิยม) แม้ว่าพอร์ตจะมีขนาดใหญ่ แต่เพื่อความสะดวกในการใช้งาน พอร์ตจะแบ่งออกเป็นสามประเภท แต่ละหมวดหมู่จะมีป้ายกำกับเป็นช่วงของค่าพอร์ต:



  • 0 ถึง 1023: พอร์ตเหล่านี้เป็นพอร์ตที่รู้จักกันดี หรือที่เรียกว่าพอร์ตระบบ ซึ่งสงวนไว้สำหรับกระบวนการของระบบที่ให้บริการเครือข่ายที่หลากหลาย ในการผูกกับพอร์ตที่รู้จักกันดี กระบวนการต้องมีสิทธิ์ผู้ใช้ระดับสูง
  • 1024 ถึง 49151: พอร์ตเหล่านี้คือพอร์ตที่ลงทะเบียน หรือที่เรียกว่าพอร์ตผู้ใช้ ซึ่งกำหนดโดย IANA สำหรับบริการเฉพาะ เมื่อมีการร้องขอ กระบวนการอาจเข้าถึงได้ ในกรณีของระบบส่วนใหญ่ ไม่ต้องการสิทธิ์ superuser ใด ๆ เพื่อใช้พอร์ตเหล่านี้
  • 49152 ถึง 65535: เหล่านี้คือพอร์ตไดนามิกหรือที่เรียกว่าพอร์ตส่วนตัว พอร์ตเหล่านี้ไม่สามารถลงทะเบียนกับ IANA ได้ พอร์ตเหล่านี้เปิดให้ใช้สำหรับบริการส่วนตัวหรือแบบกำหนดเอง และอาจได้รับการจัดสรรโดยอัตโนมัติเป็นพอร์ตชั่วคราว (พอร์ตอายุสั้นที่ใช้โดย IP)

ใน Linux มีหลายวิธีในการตรวจสอบพอร์ตที่เปิดอยู่ โดยค่าเริ่มต้น พอร์ตใด ๆ จะยังคงปิดอยู่เว้นแต่ว่าแอพกำลังใช้งานอยู่ หากพอร์ตเปิดอยู่ จะต้องกำหนดให้กับบริการ/กระบวนการ





แสดงรายการพอร์ตที่เปิดอยู่

การระบุพอร์ตที่ใช้งานง่ายกว่าการระบุพอร์ตที่เปิดอยู่ นั่นเป็นเหตุผลที่ส่วนต่อไปนี้จะแสดงวิธีการแสดงรายการพอร์ตทั้งหมดที่ใช้งานอยู่ในปัจจุบัน ใน Linux มีเครื่องมือหลายอย่างที่พร้อมใช้งาน ส่วนใหญ่มาในตัวใน Linux distro ใด ๆ

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



วิธีการต่อไปนี้แสดงให้เห็นบน Ubuntu 20.04.1 LTS

แสดงรายการโปรโตคอลและพอร์ตที่เปิดจาก /etc/services

ไฟล์ /etc/services มีข้อมูลเกี่ยวกับบริการที่กำลังทำงานอยู่ เป็นไฟล์ขนาดใหญ่พร้อมที่จะถูกครอบงำ

$แมว /ฯลฯ/บริการ| น้อย

แสดงรายการพอร์ตที่เปิดโดยใช้ netstat

เครื่องมือ netstat เป็นยูทิลิตี้สำหรับแสดงการเชื่อมต่อเครือข่ายสำหรับ TCP ตารางเส้นทาง และอินเทอร์เฟซเครือข่ายต่างๆ นอกจากนี้ยังมีสถิติโปรโตคอลเครือข่าย โดยใช้ netstat เราสามารถแสดงรายการพอร์ตที่เปิดอยู่ทั้งหมดของระบบได้

รันคำสั่ง netstat ต่อไปนี้:

$netstat -atu

มาดูรายละเอียดแฟล็กทั้งหมดที่เราใช้ในคำสั่งนี้กัน

  • ถึง : บอกให้ netstat แสดง socket ทั้งหมด
  • NS : บอกให้ netstat แสดงรายการพอร์ต TCP
  • ยู : บอกให้ netstat แสดงรายการพอร์ต UDP

นี่เป็นอีกรูปแบบหนึ่งของคำสั่ง netstat:

$netstat -lntu

มีสองแฟล็กใหม่ที่ใช้ในคำสั่ง พวกเขาหมายถึงอะไร?

  • NS : บอกให้ netstat พิมพ์เฉพาะซ็อกเก็ตการฟัง
  • NS : บอกให้ netstat แสดงหมายเลขพอร์ต

ในการแสดง PID ของกระบวนการที่ใช้พอร์ต ให้ใช้แฟล็ก -p:

$netstat -Intup

แสดงรายการพอร์ตที่เปิดโดยใช้ ss

เครื่องมือ ss เป็นเครื่องมือสำหรับตรวจสอบซ็อกเก็ต การใช้งานคล้ายกับ netstat

ในการแสดงรายการพอร์ตที่เปิดอยู่ ให้รันคำสั่ง ss ต่อไปนี้:

$NS-lntu

แฟล็กนั้นคล้ายกับ netstat ฟังก์ชั่นที่พวกเขาอธิบายนั้นค่อนข้างคล้ายกัน

  • NS : บอกให้ ss แสดงซ็อกเก็ตการฟัง
  • NS : บอก ss อย่าพยายามแก้ชื่อบริการ
  • NS : บอกให้ ss แสดง TCP sockets
  • ยู : บอกให้ ss แสดงซ็อกเก็ต UDP

แสดงรายการพอร์ตที่เปิดโดยใช้lsof

คำสั่ง lsof คือแสดงรายการไฟล์ที่เปิดอยู่ อย่างไรก็ตาม สามารถใช้เพื่อแสดงพอร์ตที่เปิดอยู่ได้

รันคำสั่ง lsof ต่อไปนี้:

$lsof-ผม

ในการรับพอร์ตที่เปิดอยู่ของโปรโตคอลเฉพาะ (TCP, UDP เป็นต้น) จากนั้นให้กำหนดพอร์ตหลังแฟล็ก -i ให้ใช้:

$lsof-ผม <มาตรการ>

แสดงรายการพอร์ตที่เปิดโดยใช้ nmap

เครื่องมือ nmap เป็นเครื่องมือที่ทรงพลังสำหรับการสำรวจเครือข่ายและการรักษาความปลอดภัย/การสแกนพอร์ต สามารถรายงานพอร์ตที่เปิดอยู่ในระบบทั้งหมด

หากต้องการแสดงรายการพอร์ต TCP ที่เปิดอยู่ ให้เรียกใช้คำสั่ง nmap ต่อไปนี้ ที่นี่ ที่อยู่ IP เป็นของคอมพิวเตอร์โฮสต์:

$sudo nmap -เซนต์ -NS-localhost

ในที่นี้ อาร์กิวเมนต์คำสั่งมีสองส่วน

  • -เซนต์ : ส่วนนี้บอกให้ nmap สแกนหาพอร์ต TCP
  • -NS- : สิ่งนี้บอกให้ nmap สแกนหาพอร์ตทั้งหมด 65535 พอร์ต หากไม่ได้ใช้ nmap จะสแกนพอร์ตเพียง 1,000 พอร์ตตามค่าเริ่มต้น

หากคุณต้องการแสดงรายการพอร์ต UDP ที่เปิดอยู่ ให้รันคำสั่ง nmap ต่อไปนี้:

$sudo nmap -ของมัน -NS-localhost

ในการรับทั้งพอร์ต TCP และ UDP ที่เปิดอยู่ ให้ใช้คำสั่งต่อไปนี้:

$sudo nmap -NS -PN -เซนต์ -ของมัน -NS-localhost

แสดงรายการพอร์ตที่เปิดโดยใช้ netcat

เครื่องมือ netcat เป็นยูทิลิตี้บรรทัดคำสั่งสำหรับการอ่านและเขียนข้อมูลผ่านการเชื่อมต่อเครือข่ายผ่านโปรโตคอล TCP และ UDP เครื่องมือนี้ยังสามารถใช้สำหรับแสดงรายการพอร์ตที่เปิดอยู่ สามารถทำการทดสอบกับพอร์ตเฉพาะหรือช่วงของพอร์ตได้

คำสั่ง netcat ต่อไปนี้จะสแกนพอร์ตตั้งแต่ 1 ถึง 1000 คำสั่ง netcat จะทำการสแกนบนโปรโตคอล TCP โดยค่าเริ่มต้น:

$nc-กับ -vlocalhost1-1000

นอกจากนี้ยังสามารถขยายไปยังรายการพอร์ตที่เป็นไปได้ทั้งหมด:

$nc-กับ -vlocalhost1-65535

มาดูรายละเอียดอย่างรวดเร็วของธงกัน

  • กับ : บอกให้ netcat สแกนเฉพาะพอร์ตที่เปิดอยู่โดยไม่ส่งข้อมูลใดๆ
  • วี : บอกให้ netcat ทำงานในโหมด verbose

หากต้องการรับเฉพาะพอร์ตที่เปิดอยู่จากรายการนี้ ให้กรองเอาต์พุตด้วย grep สำหรับคำที่สำเร็จ

$nc-กับ -vlocalhost0-65535 2> &1 | กริปที่ประสบความสำเร็จ

หากคุณต้องการสแกนบนโปรโตคอล UDP ให้เพิ่มแฟล็ก -u

$nc-กับ -v -ยูlocalhost0-65535 2> &1 | กริปที่ประสบความสำเร็จ

ความคิดสุดท้าย

ดังที่แสดงไว้ มีหลายวิธีในการสแกนหาพอร์ตที่เปิดอยู่บน Linux ฉันขอแนะนำให้ลองใช้วิธีการทั้งหมดก่อนที่คุณจะตัดสินใจว่าจะใช้วิธีใดเป็นผู้เชี่ยวชาญ หากคุณกำลังใช้เครื่องมือบางอย่าง เช่น netcat หรือ nmap เป็นประจำ การเรียนรู้วิธีการที่เกี่ยวข้องจะเป็นประโยชน์มากที่สุด

มีความสุขในการคำนวณ!