การย้าย Netcat ใน Node.js ยูทิลิตี้ CLI
หากต้องการฝังไว้ในแอป Node.js ให้ใช้แพ็คเกจ netcat แทน สิ่งนี้มีไว้เพื่อใช้เป็นเครื่องมือแบบสแตนด์อโลน แต่ก็ไม่เท่ากับการใช้งาน netcat ดั้งเดิมอย่างสมบูรณ์
| ลินุกซ์ | แมคโอเอส | หน้าต่าง |
|---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
ตัวเลือกที่มี:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-u UDP mode
-U Listen or connect to a UNIX domain socket
-v verbose
-w secs timeout for connects and final net reads (client-side)
-z zero-I/O mode [used for scanning]
$ nc -l -p 2389
$ nc localhost 2389
การเปิดการเชื่อมต่อดิบกับพอร์ต 2389
| ฝั่งเซิร์ฟเวอร์ | ฝั่งไคลเอ็นต์ |
|---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
การเชื่อมต่อข้างต้นจะสิ้นสุดลงหลังจากผ่านไป 10 วินาที
$ nc -kl 2389
ด้วยวิธีนี้เซิร์ฟเวอร์จะยังคงทำงานอยู่แม้ว่าไคลเอ็นต์จะถูกตัดการเชื่อมต่อก็ตาม
สิ่งที่น่าตื่นเต้นยิ่งกว่านั้นคือการทำให้เชลล์ทำงานอย่างรวดเร็วบนเครื่องระยะไกลโดยใช้ตัวเลือก -l หรือ listen และตัวเลือก -e หรือ execute เมื่อมีการเชื่อมต่อ Netcat จะรันโปรแกรมที่คุณเลือกและเชื่อมต่อ stdin และ stdout ของโปรแกรมเข้ากับการเชื่อมต่อเครือข่าย
$ nc -l -p 23 -e /bin/sh
มาสร้างไฟล์คำขอ HTTP get.txt ที่มีบรรทัดต่อไปนี้แล้วตามด้วยบรรทัดว่าง:
GET / HTTP/1.0
หากต้องการใช้ Netcat เพื่อดึงข้อมูลหน้าแรกของเว็บไซต์ให้ใช้:
$ nc -v www.website.com 80 < get.txt
คุณจะเห็น Netcat เชื่อมต่อกับพอร์ต 80 ส่งข้อความที่อยู่ในไฟล์ get.txt จากนั้นแสดงผลการตอบสนองของเว็บเซิร์ฟเวอร์ไปที่ stdout
ในสถานการณ์ปกติ ถ้าไคลเอ็นต์ nc ตัดการเชื่อมต่อ ก็จะไม่ลองเชื่อมต่ออีกครั้ง ด้วยพารามิเตอร์ --retry <secs> หรือ -R <secs> มันจะลองเชื่อมต่ออีกครั้งหลังจากวินาทีที่ tot
$ nc -R 5 localhost 2389
หากคุณมีนักเทียบท่า ลองแสดงรายการอิมเมจของคอนเทนเนอร์ที่เชื่อมต่อกับไฟล์ซ็อกเก็ต Unix ของนักเทียบท่า:
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock ป.ล. สำหรับตัวอย่างนี้จำเป็นต้องมีการอนุญาตรูท: sudo su
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 < /tmp/fifo | nc website.com 80 > /tmp/fifo $ nc -z 192.168.1.100 1-255
หากคุณใช้ตัวเลือก -o คุณสามารถถ่ายโอนข้อมูลการรับส่งข้อมูลฐานสิบหกทั้งหมดได้
$ nc 127.0.0.1 4445 -o /tmp/log.txt
ตามค่าเริ่มต้น ซ็อกเก็ตทั้งหมดที่ยูทิลิตี้ nc สร้างขึ้นนั้นเป็นโปรโตคอล TCP แต่ยูทิลิตี้นี้ยังใช้งานได้กับโปรโตคอล UDP อีกด้วย หากต้องการเปิดใช้งานโปรโตคอล UDP จะใช้แฟล็ก -u
| ฝั่งเซิร์ฟเวอร์ | ฝั่งไคลเอ็นต์ |
|---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
ไปป์ผ่าน UDP (-u) โดยมีเวลารอ (-w) 1 วินาทีถึง 192.168.1.111 บนพอร์ต 514
การแก้ไขข้อบกพร่องตรงกับโหมดรายละเอียด คุณสามารถเปิดใช้งานได้ด้วยพารามิเตอร์ -v หรือ env var DEBUG=nc โมดูลนี้ใช้การใช้งานโหนดของ netcat ภายใต้ประทุนเพื่อดีบักการใช้งานทั้งสอง: DEBUG=netcat:*,nc
ร็อคโค มูโซลิโน (@roccomuso)