กำลังมองหา telnet บน RHEL 8 หรือไม่? ลอง nc
เผยแพร่แล้ว: 2022-05-02Telnet เป็นโปรโตคอลเครือข่ายที่ใช้ในการเข้าถึงคอมพิวเตอร์จากระยะไกลและให้การสื่อสารแบบข้อความสองทาง ดังนั้นคุณต้องมีเซิร์ฟเวอร์ Telnet และไคลเอนต์เพื่อพูดคุยกัน
Telnet เป็นหนึ่งในยูทิลิตี Linux/Windows ยอดนิยมที่มีจุดประสงค์มายาวนาน
ปัญหาสำคัญกับ telnet ในระบบสมัยใหม่คือไม่ปลอดภัย การสื่อสารทั้งหมดใน telnet เกิดขึ้นในข้อความธรรมดา และการรับส่งข้อมูลเครือข่ายทั้งหมดจะไม่ได้รับการเข้ารหัส โดยพื้นฐานแล้วใครก็ตามที่มีการเข้าถึงและเครื่องมือที่เหมาะสมสามารถสอดแนมการรับส่งข้อมูลเครือข่ายเพื่ออ่านการรับส่งข้อมูลนี้ ด้วยเหตุนี้ ระบบปฏิบัติการลีนุกซ์ที่ทันสมัยส่วนใหญ่จึงไม่ได้ติดตั้ง telnet ไว้ล่วงหน้า และบางระบบปฏิบัติการก็ไม่แนะนำให้ใช้
ด้วยการถือกำเนิดของโปรโตคอล SSH หรือ Secure Shell ซึ่งเป็นมากกว่าการแทนที่ด้วยการเข้ารหัสสำหรับ telnet การใช้ telnet ตามวัตถุประสงค์ที่ตั้งใจไว้จึงล้าสมัยไปนานแล้ว แต่มีการใช้งานอื่นของ telnet ที่ผู้ดูแลระบบและผู้สนใจเทคโนโลยีจำนวนมากยังคงใช้อยู่ ซึ่งก็คือการตรวจสอบการเชื่อมต่อของพอร์ต TCP ระยะไกล
คุณสามารถตรวจสอบได้ว่าพอร์ต TCP ระยะไกลกำลังฟังและตอบสนองอย่างถูกต้องหรือไม่โดยใช้คำสั่ง telnet ตัวอย่างด้านล่างแสดงวิธีที่เราสามารถตรวจสอบว่า google.com
ใช้งานได้และใช้งานได้โดยการตรวจสอบการเชื่อมต่อ HTTP/HTTPS
$ telnet google.com 80 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $ $ telnet google.com 443 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $
พอร์ต TCP ที่ไม่ได้เปิดหรือเข้าถึงได้จะมีลักษณะดังนี้เมื่อตรวจสอบด้วย telnet
:
$ telnet google.com 22 Trying 142.250.193.174... ^C $
ทำให้การแก้ไขปัญหาการเชื่อมต่อเครือข่ายทำได้ง่ายเมื่อใช้ร่วมกับคำสั่ง ping
, traceroute
หรือ tracepath
, netstat
เป็นต้น
หากคุณใช้ RHEL 8 (หรือเวอร์ชันเก่ากว่าของ RHEL/CentOS) คุณจะมีตัวเลือกในการใช้ nc (หรือ Ncat หรือ Network Connector) ซึ่งสนับสนุนตัวเลือกต่างๆ ที่เกี่ยวข้องกับการวินิจฉัยเครือข่าย เราจะพูดถึงวิธีการติดตั้งและใช้เครื่องมือนี้ใน RHEL8 และระบบที่คล้ายกัน
เอ็นซีคืออะไร?
nc (หรือ Ncat) เป็นเครื่องมือบรรทัดคำสั่งสำหรับวัตถุประสงค์ทั่วไปที่เป็นที่นิยมสำหรับการอ่าน เขียน เปลี่ยนเส้นทาง และเข้ารหัสข้อมูลในเครือข่าย เดิมทีเขียนขึ้นสำหรับโปรเจ็กต์ nmap
ขณะนี้มีการใช้งาน Netcat หลายรายการ ทำงานร่วมกับทั้ง TCP และ UDP ใน IPv4 และ IPv6 และมอบกรณีการใช้งานที่เป็นไปได้ที่ไร้ขีดจำกัด
ด้านล่างนี้เป็นคุณสมบัติหลักบางประการของยูทิลิตี้ nc
:
- ความสามารถในการ
ncats
เข้าด้วยกัน - การเปลี่ยนเส้นทางของพอร์ต TCP, UDP และ SCTP ไปยังไซต์อื่น
- เข้ารหัสการสื่อสารด้วยการสนับสนุน SSL
- รองรับพร็อกซี่ผ่านพร็อกซี SOCK4/5 หรือ HTTP (รวมถึงการตรวจสอบสิทธิ์)
- รองรับหลายแพลตฟอร์ม รวมถึง Windows, Linux และ macOS
กำลังติดตั้ง nc
nc
พร้อมใช้งานเป็นส่วนหนึ่งของที่เก็บเริ่มต้นในระบบ RHEL ในการติดตั้งบนระบบ RHEL 7 เพียงแค่ออกคำสั่งด้านล่างบนเทอร์มินัล:
$ sudo yum install -y nc
สำหรับระบบ RHEL 8 คุณสามารถใช้ dnf
เป็น:
$ sudo dnf install -y nc
ตรวจสอบการเชื่อมต่อ TCP
แม้ว่า nc
จะนำเสนอคุณสมบัติมากมายที่สนับสนุนกรณีการใช้งานหลายกรณีในแอปพลิเคชันต่างๆ แต่หนึ่งในคุณสมบัติทั่วไปก็คือระหว่างการแก้ไขปัญหาเครือข่ายแทน telnet
nc
สามารถแสดงว่าคุณสามารถเข้าถึงพอร์ต TCP ได้หรือไม่ นี่คือไวยากรณ์:
$ nc -vz <IP/DNS> <Port>
ตัวอย่างเช่น ถ้าฉันต้องการตรวจสอบว่าฉันสามารถเข้าถึง Geekflare ผ่าน http
หรือ https
ได้หรือไม่ ฉันสามารถตรวจสอบว่าการใช้ nc
ดังที่แสดงด้านล่าง (พอร์ต 80
สำหรับ http
ในขณะที่ 443
สำหรับ https
):
$ nc -vz geekflare.com 80 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.11.88:80. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. $ $ nc -vz geekflare.com 443 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.10.88:443. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds. $
ในทำนองเดียวกัน พอร์ตที่ไม่สามารถเข้าถึงได้หรือถูกบล็อกจะแสดงเอาต์พุตเช่น (ที่อยู่หลายรายการถูกตรวจสอบเนื่องจาก Geekflare DNS ชี้ไปยัง IP หลายรายการ):
$ nc -vz geekflare.com 22 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connection to 172.67.70.213 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.11.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.10.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Network is unreachable. $ $ dig geekflare.com +short 104.26.10.88 172.67.70.213 104.26.11.88 $
ตรวจสอบการเชื่อมต่อ UDP
telnet
สามารถตรวจสอบการสื่อสารด้วยพอร์ต TCP ระยะไกลเท่านั้น ในขณะที่ nc
อนุญาตให้คุณตรวจสอบการเชื่อมต่อ TCP และ UDP
nc
สามารถส่งแพ็กเก็ต UDP แทนที่จะส่งแพ็กเก็ต TCP เริ่มต้นโดยใช้:
$ nc -vzu <IP/DNS> <Port>
แต่ UDP เป็นโปรโตคอลแบบไม่ใช้เซสชัน ซึ่งแตกต่างจาก TCP ดังนั้น คุณจึงไม่สามารถยืนยันการเชื่อมต่อ UDP แบบ end-to-end ได้ในทุกสถานการณ์ที่เป็นไปได้ เพียงแค่ส่งแพ็กเก็ต UDP ที่ปลายด้านหนึ่ง เว้นแต่ว่ากระบวนการรับฟังที่ปลายทางระยะไกลจะส่ง การตอบสนองบางอย่าง nc
จะไม่สามารถตัดสินได้ว่าแพ็กเก็ตที่ส่งไปถึงปลายทางหรือไม่ แต่ nc
เสนอทางเลือกอื่นในการพิจารณาการเชื่อมต่อ UDP แบบ end-to-end โดยการเปิดตัวฟัง UDP สมมติว่าคุณมีสิทธิ์เข้าถึง CLI บนเซิร์ฟเวอร์ระยะไกลได้อย่างเหมาะสม

ดังนั้น สมมติว่าคุณต้องตรวจสอบการเชื่อมต่อ UDP ระหว่างสองโฮสต์ Linux สำหรับ DNS โดยใช้ nc
วิธีง่ายๆ ในการทำเช่นนี้คือการเปิดใช้เซิร์ฟเวอร์ nc
ฟังบนพอร์ตที่ต้องการ:
$ sudo nc -ul <Port>
สำหรับ DNS เราต้องตรวจสอบพอร์ต 53
ซึ่งจะทำให้คำสั่งดังกล่าวเป็น:
$ nc -ul 53
ที่ฝั่งไคลเอ็นต์ คุณจะต้องเปิดใช้กระบวนการ nc
อื่นที่ส่งแพ็กเก็ต UDP ไปยังเซิร์ฟเวอร์:
$ nc -u <IP/DNS> <Port>
ซึ่งจะทำให้คำสั่งของเรา:
$ nc -u <IP/DNS> 53
พิจารณาว่าไม่มีอะไรปิดกั้นการรับส่งข้อมูล UDP สำหรับพอร์ต 53
ระหว่างสองเครื่องนี้ สิ่งที่คุณพิมพ์และป้อนในเครื่องหนึ่งควรมองเห็นได้บนโฮสต์อื่น เช่น การแชทสองทาง หากไม่เป็นเช่นนั้น ไฟร์วอลล์บางตัวกำลังบล็อกการเชื่อมต่อระหว่างสองระบบนี้
โมเดลเซิร์ฟเวอร์และไคลเอ็นต์ที่ใช้ nc
ทำงานได้อย่างไม่มีที่ติสำหรับการตรวจสอบการเชื่อมต่อง่ายๆ ระหว่างโฮสต์ประเภทนี้ เช่นเดียวกับการตรวจสอบ UDP ด้านบน nc
ยังสามารถฟังแพ็กเก็ต TCP บนพอร์ตที่กำหนด:
$ sudo nc -l <Port>
ที่ฝั่งไคลเอ็นต์ โดยปกติแล้ว คุณสามารถส่งแพ็กเก็ต TCP เพื่อตรวจสอบการเชื่อมต่อ:
$ nc <IP/DNS> <Port>
ไม่จำเป็นต้องใช้วิธี nc
ของเซิร์ฟเวอร์/ไคลเอ็นต์ในกรณีของการเชื่อมต่อ TCP (ต่างจาก UDP) เนื่องจากเป็นโปรโตคอลที่เน้นการเชื่อมต่อและทำงานร่วมกับการตอบรับ กระบวนการฟังที่ทำงานบน TCP จะตอบสนองโดยตรงต่อแพ็กเก็ต nc
TCP
สรุป
บทความนี้สรุปว่ายูทิลิตี nc
ทำหน้าที่เป็นตัวทดแทนโดยตรงสำหรับ telnet
ในระบบ Linux สมัยใหม่ได้อย่างไร ตราบใดที่การตรวจสอบการเชื่อมต่อพอร์ตดำเนินไป และให้พลังแก่ผู้ใช้ปลายทางในการวินิจฉัยและแก้ไขปัญหาเครือข่ายมากขึ้น
สามารถเข้าถึงวิธีใช้ nc
ได้โดยใช้คำสั่ง nc -h
:
$ nc -h Ncat 7.70 ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (eg 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples $
สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับคำสั่ง nc
โปรดดูที่หน้าคู่มือ
$ man nc