Telnet ส่ง Ctrl-C


14

ฉันใช้ telnet เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เทอร์มินัลซึ่งพร็อกซีการรับส่งข้อมูลไปยังพอร์ต RS-232

น่าเสียดายที่เมื่อใช้อุปกรณ์บางอย่างมันเป็นไปไม่ได้ที่จะส่งตัวอักษรCTRL+ C(0x03) แทนที่จะส่งตัวละครดูเหมือนว่าลูกค้าในพื้นที่จะได้รับการกดแป้นและฉันก็ออกจาก "โหมดอื่น ๆ " สิ่งที่ฉันต้องการก็แค่ส่งตัวละคร

เพื่อแก้ไขข้อบกพร่องนี้ฉันได้เล่นกับ:

^] toggle termdata

และ

^] toggle options

นี่คือสิ่งที่เกิดขึ้นเมื่อฉันกดCTRL+ Cบนเซิร์ฟเวอร์เทอร์มินัลซึ่งไม่ทำงาน:

telnet 10.10.129.101 2012
Trying 10.10.129.101...
Connected to termserv-val3 (10.10.129.101).
Escape character is '^]'.
^]
telnet> toggle options
Will show option processing.
^]
telnet> toggle termdata
Will print hexadecimal representation of terminal traffic.
SENT IAC IP
SENT DO TIMING MARK

นี่คือสิ่งที่เกิดขึ้นบนเซิร์ฟเวอร์เทอร์มินัลที่ใช้งานได้:

telnet termserv-val2 2012
Trying 10.10.128.93...
Connected to termserv-val2 (10.10.128.93).
Escape character is '^]'.

telnet> toggle options
Will show option processing.

telnet> toggle termdata
Will print hexadecimal representation of terminal traffic.
< 0x0   03
^C

ฉันลองแล้วtoggle localcharsแต่ก็ไม่ได้สร้างความแตกต่างเลย

ฉันได้ลองแล้วmode characterซึ่งอนุญาตให้ฉันส่งอักขระCTRL+ Cแต่ที่นี่ฉันไม่ได้รับผลลัพธ์ใด ๆ กลับมาจากอุปกรณ์

ฉันจะกำหนดค่าไคลเอ็นต์ telnet ของฉันเพื่อแก้ไขปัญหานี้ได้อย่างไร


2
นี่คือเซิร์ฟเวอร์เทอร์มินัลอะไร?
Michael Hampton

คำตอบ:


5

คุณลองปิด localchars ในไคลเอ็นต์ telnet ของคุณหรือไม่

bash$ telnet
telnet> toggle localchars
Won't recognize certain control characters.
telnet> open myhost

คุณอาจจะสามารถวางคำสั่งนี้ใน~/.telnetrcไฟล์ขึ้นอยู่กับรุ่นของ telnet ของคุณ


ฉันลองแล้ว (อ่านคำถามสุดท้าย)
อัลลัน

3

คุณอาจลองใช้โหมด clean-8-bit ... มันจะหยุด telnet ไม่ให้ตีความข้อมูลส่วนใหญ่

telnet -8 host port

(นี่เป็นการยิงในที่มืด)

ส่วนใหญ่คุณอยู่ในเส้นทางที่ถูกต้องพยายามรับ telnet เพื่อหยุดการกดแป้นล่วงหน้าก่อน ... เช่น CTRL-C และ CTRL-Z และอื่น ๆ โหมด 8 บิตน่าจะช่วยได้


1
ฉันได้ลองสิ่งนี้แล้วมันใช้งานไม่ได้ ฉันเคยพบวิธีการแก้ปัญหาอื่น: เซิร์ฟเวอร์เทอร์มินัลสามารถกำหนดค่าให้ทำหน้าที่เป็น "โหมดเซิร์ฟเวอร์ TCP" (การตั้งค่าเริ่มต้นซึ่งฉันมีปัญหาด้วย) แต่ถ้าสิ่งนี้เปลี่ยนเป็น "โหมด COM จริง" สิ่งที่ทำงาน ฉันไม่รู้ว่าอะไรคือความแตกต่างที่แท้จริง ...
อัลลัน

ขอแสดงความยินดีกับการหาทางแก้ไข ดีเสมอที่จะได้รับการแก้ไขปัญหา
lornix

ปี ... ฉันไม่พอใจกับโซลูชันนี้ฉันอยากจะแก้ไขมันด้วยการเปลี่ยนแปลงการกำหนดค่าไคลเอ็นต์ telnet ของฉัน
Allan

1
@Allan โปรดส่งความคิดเห็นของคุณเป็นคำตอบที่ทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องสำหรับการแก้ไขปัญหาขอบคุณ
ไม่มีให้บริการ

3

สิ่งนี้อาจช่วยได้แม้ว่าจะใช้เครื่องมือ 3 อย่างแทนtelnet:

echo 03 | xxd -r -p | nc host port


1

^Cเป็นตัวละครที่หยุดพัก คุณสามารถส่งมันด้วยการหลบหนี Telnet (ค่าปกติคือ^]) send brkแล้ว


3
BRKลำดับของ Telnet มีความสำคัญเฉพาะในการนำไปใช้งานเมื่อสิ้นสุดการรับและไม่เหมือนกับการส่งอักขระETX( ^C) ในระบบ Unixy มันมักจะหมายถึงการทำTCSBRK ioctlสิ่งที่ TTY telnetdใช้ บนอุปกรณ์แบบอนุกรมซึ่งมักแปลให้ถือสายสัญญาณต่ำเป็นเวลาหนึ่งในสี่ถึงครึ่งวินาที
Blrfl

ไม่แน่ใจว่ามันเปลี่ยนแปลงอะไรหรือไม่ แต่ยังมีquitคำสั่งใน telnet อีกด้วย
VasyaNovikov

0

ฉันใช้ 'toggle options' และ 'toggle termdata' เพื่อตรวจสอบสถานการณ์ที่ไซต์ของฉันตรงกับโปสเตอร์ต้นฉบับ ฉันสามารถส่งอักขระ ^ C (control-C) เฉพาะกับคำสั่ง telnet 'send ip' ตามที่อธิบายไว้ในเอกสารประกอบ ในกรณีของฉันฉันใส่คำสั่งทั้ง 3 ลงใน ~ / .telnetrc


0

ใช้

nc host port

หากสิ่งที่คุณต้องการเพียงเชื่อมต่อกับเซิร์ฟเวอร์พอร์ตและขัดจังหวะCtrl Cเมื่อจำเป็น คุณสามารถติดตั้งncกับnetcatแพ็คเกจ

PS ความคิดนั้นนำมาจากคำตอบ @ bambam-s แต่ฉันไม่รู้ว่าอะไรคือความหมายของxxdคำสั่งที่ใช้และมันใช้ได้ดีถ้าไม่มีมันสำหรับกรณีการใช้งานของฉัน

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