จะสร้างฟัง TCP ได้อย่างไร?


40

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

จุดมุ่งหมาย:เพื่อทดสอบฟังก์ชั่นทุบตีนี้ฉันจำเป็นต้องสร้างช่วงของพอร์ตที่อยู่ในสถานะ LISTEN

ความพยายาม:ใน Windows สามารถสร้างพอร์ต LISTEN โดยใช้คำสั่ง PowerShell เหล่านี้ :

PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP    0.0.0.0:1234           0.0.0.0:0              LISTENING       InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>

จากสิ่งนี้ฉันพยายามคิดเกี่ยวกับคำสั่งที่สามารถทำได้เช่นเดียวกันกับ CentOS แต่ฉันไม่รู้ว่าทำไมและฉันเริ่ม Google โดยไม่ต้องหาวิธีแก้ไขปัญหานี้

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

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*

ในหมายเหตุด้าน: มันเป็นไปได้ที่จะหาพอร์ตการฟังโดยไม่ต้องผ่านการเต้นทั้งหมดนี้ บน netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nuLinux: เมื่อวันที่ BSD netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu*:
lcd047

คำตอบ:


40

คุณสามารถใช้nc -lเป็นวิธีการทำสิ่งที่คุณกำลังมองหา การใช้งานบางอย่างของncมี-Lตัวเลือกที่ช่วยให้การเชื่อมต่อยังคงอยู่

หากคุณต้องการเพียงเล็กน้อยในขณะที่คุณสามารถเปิดคำสั่งนี้ในการforวนซ้ำและเปิดพอร์ตจำนวนมากในลักษณะนั้น

หากคุณต้องการเปิดเหล่านี้อีกต่อไปคุณสามารถใช้หนึ่งในเซิร์ฟเวอร์สุดเพื่อสร้างภูต


1
แทนการ-Lที่ผมจะแนะนำ: -k, --keep-openยอมรับการเชื่อมต่อในหลายฟังโหมด
มานูเอล Durando

37

คุณสามารถสร้าง listener พอร์ตโดยใช้ Netcat

root@ubuntu:~# nc -l 5000

คุณสามารถตรวจสอบว่าพอร์ตเปิดอยู่หรือไม่ใช้คำสั่ง netstat

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

คุณสามารถตรวจสอบกับ NC:

ผู้ฟังเซิร์ฟเวอร์ Netcat:

nc -l localhost 5000

ลูกค้า Netcat:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

ถ้าพอร์ตไม่เปิด

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
ฉันต้องระบุพอร์ตด้วย-pหรือไม่ได้ผล:nc -l -p 1234
Leahkim

nc -l 12345 ทำงานใน Ubuntu 16.04
yuen shi

สำหรับผู้ที่มี/bin/nc --> nc.traditional(เช่นเดเบียน) ให้ใช้-pตัวเลือกตามที่ @Leahkim แนะนำข้างต้น
ankostis


0

โปรดทราบว่าnetcatแพ็คเกจของ Debian มีการใช้งานที่แตกต่างกันโดยที่ (อย่างน้อย) คุณต้องระบุพอร์ตผ่าน-pตัวเลือกและ-kตัวเลือกไม่ทำงาน คุณอาจพบปัญหานี้โดยใช้ Docker

sudo apt install -y netcat

nc -l -p 1337

คุณสามารถใช้openbsd-netcatแทน-kตัวเลือกที่ทำงาน


0

ด้านล่างรหัสหลามมีประโยชน์ในการเปิดพอร์ตดัมมี

'' 'เซิร์ฟเวอร์ซ็อกเก็ตอย่างง่ายโดยใช้เธรด' '' ซ็อกเก็ตนำเข้านำเข้า sys HOST = '' # ชื่อสัญลักษณ์ซึ่งหมายถึงอินเตอร์เฟสที่มีอยู่ทั้งหมด PORT = 5500 # พอร์ตที่ไม่มีสิทธิพิเศษ s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) พิมพ์ 'สร้างซ็อกเก็ต'

ผูกซ็อกเก็ตกับโฮสต์ท้องถิ่นและพอร์ต

ลอง: s.bind ((HOST, PORT)) ยกเว้น socket.error เป็น msg: print 'Bind ล้มเหลว รหัสข้อผิดพลาด: '+ str (msg [0]) +' ข้อความ '+ msg [1] sys.exit () พิมพ์' Socket bind complete '

เริ่มฟังบนซ็อกเก็ต

s.listen (10) พิมพ์ 'ฟังก์ชั่นซ็อกเก็ตตอนนี้'

ตอนนี้พูดคุยกับลูกค้า

ในขณะที่ 1: # รอรับการเชื่อมต่อ - บล็อกการโทร conn, addr = s.accept () พิมพ์ 'เชื่อมต่อกับ' + addr [0] + ':' + str (addr [1]) s.close ()

บันทึกไฟล์และเรียกใช้ด้วยคำสั่ง python ดังแสดงด้านล่าง

~] # python portlistener.py ซ็อกเก็ตที่สร้างขึ้นซ็อกเก็ตผูกซ็อกเก็ตที่สมบูรณ์ในขณะนี้ฟัง

จากนั้นคุณสามารถตรวจสอบจากเครื่องที่ต้องการ

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