การย้าย 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)