กำลังมองหา telnet บน RHEL 8 หรือไม่? ลอง nc

Telnet เป็นโปรโตคอลเครือข่ายที่ใช้ในการเข้าถึงคอมพิวเตอร์จากระยะไกลและให้การสื่อสารแบบข้อความสองทาง ดังนั้นคุณต้องมีเซิร์ฟเวอร์ 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>

ตัวอย่างเช่น หากฉันต้องการตรวจสอบว่าฉันสามารถเข้าถึง admintrick.com ผ่าน http หรือ https ได้หรือไม่ ฉันสามารถตรวจสอบว่าการใช้ nc ดังที่แสดงด้านล่าง (พอร์ต 80 สำหรับ http ในขณะที่ 443 สำหรับ https):

$ nc -vz admintrick.com.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 admintrick.com.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.
$

ในทำนองเดียวกัน พอร์ตที่ไม่สามารถเข้าถึงได้หรือถูกบล็อกจะแสดงเอาต์พุตเช่น (ที่อยู่หลายรายการถูกตรวจสอบเป็น admintrick.com DNS ชี้ไปยัง IP หลายรายการ):

$ nc -vz admintrick.com.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 admintrick.com.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 สมัยใหม่ได้อย่างไร ตราบใดที่การตรวจสอบการเชื่อมต่อพอร์ตดำเนินไป และให้พลังแก่ผู้ใช้ปลายทางในการวินิจฉัยและแก้ไขปัญหาเครือข่ายมากขึ้น

  5 ทางเลือก Slack โอเพ่นซอร์สที่ดีที่สุด [2022]

สามารถเข้าถึงวิธีใช้ 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 (e.g. 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

เรื่องล่าสุด

x