วิธีสร้างแชทอย่างง่ายโดยใช้ netcat


27

ขณะนี้ฉันกำลังทำงานในโครงการและฉันได้ติดตั้งแอปพลิเคชั่นแชทอย่างง่ายโดยใช้netcatห้องสมุด

ไคลเอ็นต์จะได้รับพร้อมต์ให้ป้อนหมายเลขพอร์ตและคำสั่ง

nc -l -p xxxx

โดยที่xxxxหมายเลขพอร์ตที่ลูกค้าป้อน

ในทำนองเดียวกันโฮสต์จะได้รับพร้อมต์สำหรับหมายเลขพอร์ตเดียวกันและมีการสร้างการเชื่อมต่อโดยใช้

nc <ip_address> -p xxxx

อย่างไรก็ตามการทำเช่นนี้จะให้ประสบการณ์การแชทเปล่าเนื่องจากจะไม่แสดงชื่อผู้ใช้ของบุคคลที่พิมพ์ข้อความเช่น

hey
hello
what's up
Nothing

ฉันอยากให้มันเป็นอย่างนั้น

Foo : hey
Boo : hello
Foo : what's up
Boo : Nothing

ฉันสามารถใช้netcatเพื่อให้บรรลุหน้าที่การทำงานนี้หรือมีสิ่งอื่นใดอีกไหมที่ทำได้


1
ncไม่เป็นที่รู้จักusernameและไม่สามารถส่งได้ Bob: helloเท่านั้นที่สามารถทำได้คือการพิมพ์ข้อความในรูปแบบ
2707974

ฉันต้องการหลีกเลี่ยงสิ่งที่แน่นอน ฉันยังเปิดให้โปรแกรมอื่นที่สามารถใช้ฟังก์ชันการทำงานเดียวกันได้
Sachin Kamath

ลองหาวิธีแก้ปัญหาในคำตอบ
2707974

คำตอบ:


34

คุณสามารถทำอะไรเช่นนี้

สมมติว่าAliceเป็นเซิร์ฟเวอร์ เธอประเภท:

mawk -W interactive '$0="Alice: "$0' | nc -l -p <port_number> <ip_of_alice>

จากนั้นบ็อบเชื่อมต่อกับเซิร์ฟเวอร์นั้น เขาพิมพ์:

mawk -W interactive '$0="Bob: "$0' | nc <ip_of_alice> <port_number>

mawkสายเพียงแค่เพิ่มชื่อ prepending ของคนที่ "แชท" เราจำเป็นต้อง-W interactiveตั้งค่าการเขียนแบบไม่มีบัฟเฟอร์ให้กับ stdout และ line buffered reads จาก stdin


ตอนนี้อลิซพิมพ์Hi Bobแล้วเห็น:

Hi Bob

บ๊อบเห็นว่า:

Alice: Hi Bob

บ๊อบประเภทHi Aliceและเห็น:

Alice: Hi Bob
Hi Alice

อลิซเห็น:

Hi Bob
Bob: Hi Alice

2
nc ไม่สามารถใช้ -s และ -l ได้ในเวลาเดียวกัน ไม่จำเป็นต้องใช้ -s
Sachin Kamath

ฉันตื่นแล้ว: ตัวเลือก `-W แบบโต้ตอบ 'ไม่รู้จักถูกเพิกเฉย
zt1983811

@ zt1983811 คุณต้อง GNU ไม่awk mawk
ความโกลาหล

@chaos ฉันใช้ awk awk -W interactive '$ 0 = "Alice:" $ 0' | พอร์ต nc -lvk ip; ls -al / usr / bin / awk lrwxrwxrwx 1 รู
ตรา

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