ฉันจะรู้ได้อย่างไรว่าพอร์ตนั้นมีอยู่ใน Ubuntu 8.04 หรือไม่?


28

มีคำสั่งใดบ้างที่ฉันสามารถเรียกใช้จาก bash ที่จะบอกฉันว่าพอร์ตเปิดอยู่หรือไม่?

คำตอบ:


37

ใช้ "netstat" เพื่อตรวจสอบพอร์ตที่ใช้อยู่ในปัจจุบัน

netstat -antp

Proto Recv-Q ผู้ส่งในท้องถิ่นที่อยู่ต่างประเทศที่อยู่รัฐชื่อ PID / ชื่อโปรแกรม
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / ตั้งชื่อ     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / ชื่อ     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / ชื่อ     
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 / ตั้งชื่อ     

2
"netstat -antp | grep 80" โดยที่ 80 คือหมายเลขพอร์ตที่จะค้นหา
Umair A.

13

นี่ (netstat) เป็นทางออกที่เร็วที่สุด ...

netstat -lnt

... แต่สิ่งนี้จะช่วยให้คุณสามารถควบคุมได้มากขึ้น (ที่ความเร็ว (บางครั้งมีความเร็วมาก)) ...

lsof -n -i -a -u www-data

ตัวอย่างด้านบนแสดงตัวอย่างพอร์ต TCP ทั้งหมดที่เปิดและอยู่ในLISTENสถานะ AND ( -a) ที่เป็นของwww-dataผู้ใช้Apache ( )


8

คำตอบที่ดีทั้งหมด

อย่างไรก็ตามคุณไม่ต้องพูดถึงหากคุณเข้าสู่ระบบคอมพิวเตอร์ที่เป็นปัญหา ; P

ถ้าไม่เช่นนั้นnmapคือเพื่อนของคุณ

สำหรับการเริ่มลอง:

nmap -Otarget

amapยังเป็นตัวเลือกที่ดีซึ่งจะพยายามคาดเดาซอฟต์แวร์เซิร์ฟเวอร์ด้วยการคว้าหน้าแบนเนอร์

สำหรับการเริ่มลอง:

amaptarget1-6000


7

ลอง

lsof -i :<port number>

หากคุณได้รับผลลัพธ์ใด ๆ สิ่งที่ฟังและผูกพันเช่น

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

4
netstat -tlnp  

แสดงtพอร์ต cp ที่listening แสดงnหมายเลขเท่านั้น (ไม่แก้ไขชื่อ - ทำให้เร็วขึ้น) และแสดงprocess ที่กำลังฟัง ( pทำงานได้ดีถ้าคุณรูท)

netstat -ulnp  

แสดงuพอร์ต dp ที่listening แสดงnหมายเลขเท่านั้น (ไม่แก้ไขชื่อ - ทำให้เร็วขึ้น) และแสดงprocess ที่กำลังฟัง ( pทำงานได้ดีถ้าคุณรูท)

netstat -unp  

แสดงuพอร์ต dp ที่เปิดอยู่ แต่ไม่ฟังแสดงnเฉพาะตัวเลข (ไม่แก้ไขชื่อ - ทำให้เร็วขึ้น) และแสดงprocess ที่กำลังฟัง ( pทำงานได้ดีถ้าคุณรูท)

netstat -an

แสดงaพอร์ตที่ใช้งานอยู่แสดงnเฉพาะตัวเลข - ไม่ต้องแก้ไขชื่อ

lsof -i <proto>@<host>:<port>

เช่น

lsof -i tcp@localhost:25

เพื่อดูว่ามีอะไรกำลังฟังอยู่บนพอร์ต localhost 25 / TCP หรือ

lsof -i tcp@0.0.0.0:636 

เพื่อดูว่ามีซ็อกเก็ตใด ๆ ทั้งในตัวเครื่องหรือจากระยะไกลไม่ว่าจะฟัง (ในพื้นที่) หรือเชื่อมต่อกับ (ภายในหรือระยะไกล) สำหรับโฮสต์ / อินเตอร์เฟสใด ๆ


2

lsof (เปิดรายการไฟล์) เป็นเครื่องมือที่ดีในการดูว่ากระบวนการกำลังรับฟังพอร์ตอยู่หรือไม่

lsof -P | grep: <port-number>

netstat เป็นเครื่องมือที่ดีสำหรับการดูว่ามีการเชื่อมต่อที่ใช้งานอยู่หรือไม่

netstat -n | grep: <port-number>


2

คุณไม่ได้พูดถึงโพรโทคอลที่คุณต้องการใช้เช่น TCP หรือ UDP และเป็นสิ่งสำคัญที่จะต้องตระหนักว่า "พอร์ต" นั้นค่อนข้างไม่ละเอียดนักเนื่องจากระบบรองรับการแก้ปัญหาซ็อกเก็ต เช่นหากระบบของคุณมีที่อยู่ IP หลายแห่งพอร์ต 80 อาจถูกใช้กับที่อยู่ IP ทั้งหมด (แอปพลิเคชันนั้นผูกกับ "0.0.0.0" หรือ "::" หรือต่อจากที่อยู่ IP แต่ละรายการอย่างต่อเนื่อง) หรืออาจอยู่ใน ใช้เฉพาะในส่วนย่อยของที่อยู่ IP เหล่านั้น

วิธีที่ดีที่สุดและแน่นอนที่สุดในการพิจารณาว่าพอร์ต / ที่อยู่นั้นว่างและพร้อมใช้งานหรือไม่ Netcat มีประโยชน์สำหรับสิ่งนี้

nc -l [-s abcd] -p NN

จะพยายามผูกกับพอร์ต TCP NN บน (เป็นทางเลือกค่าเริ่มต้นจะเป็นที่อยู่ทั้งหมด) abcd เพิ่มตัวเลือก -u เพื่อทำเช่นเดียวกันใน UDP

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

nc [-u] abcd NN

จะเชื่อมต่อกับพอร์ต NN บน abcd โดยใช้ UDP หากระบุแฟล็ก -u จากนั้นคุณสามารถพิมพ์อินพุตลงในส่วนท้ายไคลเอ็นต์และควรแสดงบนเซิร์ฟเวอร์ หากไม่เป็นเช่นนั้นคุณจะต้องค้นหาเครื่องมือเฉพาะระบบและเครือข่าย


2

ฉันใช้fuser (ในแพ็คเกจ psmisc):

fuser -n tcp PORT

นำกลับpidของกระบวนการที่โยงกับพอร์ตนี้

ถ้านี่คือการรู้ว่าพอร์ตกำลังฟังหรือไม่telnet ตัวเก่าที่ดีจะใช้กลลวง :)

telnet 127.0.0.1 PORT


2

ซับในตัวนี้จะแสดงรายการพอร์ต TCP ทั้งหมดที่ใช้งานอยู่ มันทำงานได้ดีใน Ubuntu และ OS X

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

รายการจะมีหนึ่งพอร์ตต่อบรรทัดโดยไม่มีข้อมูลเพิ่มเติม


รักมัน! gret ลดลงสำหรับสคริปต์ทุบตีเช่น:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki

0

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

(ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งโหนดและใช้งานnodeได้กับไม่ใช่nodejsหรือเปลี่ยนโปรแกรมตาม)

บันทึกสิ่งต่อไปนี้ลงในไฟล์ที่เรียกว่าcheck-portในเส้นทางของคุณหรือในโครงการของคุณ

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

ตั้งค่าการอนุญาต

chmod +x path/to/check-port

วิ่งออกจากเส้นทางของคุณ

check-port 8080

หรือเรียกใช้จากไดเรกทอรีเดียวกัน

./check-port 8080

จนถึงตอนนี้มันใช้งานได้ค่อนข้างดี

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