Score:1

Socat - เป็นไปได้ไหม?

ธง us

มีวิธีการฟังและดำเนินการคำสั่ง (สำหรับทุกการเชื่อมต่อ) ขณะส่งต่อพอร์ตด้วย socat หรือไม่ ตัวอย่างที่ไม่ทำงานเพื่อให้ชัดเจนยิ่งขึ้น:

socat TCP-LISTEN:8080,reuseaddr, "exec:ls" fork tcp:localhost:80

Score:0
ธง cl
A.B

แบบนี้?

socat tcp-listen:8080,reuseaddr,fork system:'ls; ผู้บริหาร socat - tcp\:localhost\:80'
  • พารามิเตอร์ที่ 1 ได้รับ ,ส้อม เพื่อที่จะมี โซแคท รับฟังการเชื่อมต่อเพิ่มเติม

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

  • ซึ่งเป็นของใหม่ โซแคท สั่งการ

    ซึ่งจะมีการเชื่อมต่อ stdin/stdout กับเอาต์พุต/อินพุตของไคลเอนต์ระยะไกล และจะส่งต่อแบบสองทิศทางอีกครั้งไปยังปลายทางถัดไป โปรดทราบว่ามัน : ตัวคั่น (และอักขระพิเศษอื่นๆ อีกสองสามตัว) จะต้องหนีด้วย a \ เพื่อไม่ให้สับสน แรก โซแคท สั่งการ. หากบรรทัดนี้ซับซ้อนมากขึ้น การเรียกใช้สคริปต์เช่นนี้จะง่ายขึ้น:

    socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
    

    กับ /path/to/myscript.sh:

    #!/bin/sh
    ล
    ผู้บริหาร socat - tcp:localhost:80
    

    ผู้บริหาร ในคำสั่งเชลล์เป็นทางเลือก แต่หลีกเลี่ยงการออกจากเชลล์อย่างไร้ประโยชน์

โซแคท ยังส่งออกตัวแปรบางตัวของตัวเองที่สามารถนำมาใช้ซ้ำในสคริปต์ได้ ซึ่งคุณสามารถตรวจสอบได้ เช่น (เมื่อทำการเชื่อมต่อ):

$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
SOCAT_SOCKADDR=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970
hyogy avatar
us flag
นี่มันอัศจรรย์มาก! ขอบคุณ!(: ขอคำแนะนำอีกหนึ่งข้อ: ใช้บรรทัดนั้น คุณจะถอดรหัสสตริงใน base64 ได้อย่างไร ฉันหมายถึง: ข้อมูลที่ส่งผ่านพอร์ต 8080 นั้นเข้ารหัสเป็น base64 แต่ฉันต้องการถอดรหัสก่อนที่ข้อมูลจะไปถึงพอร์ต 80 ( data กลับมาจากพอร์ต 80 ไม่ต้องเข้ารหัส )
A.B avatar
cl flag
A.B
ทันทีที่คุณใช้ไปป์ที่ไหนสักแห่ง (เช่น: `base64 -d | socat ... `) การสื่อสารจะไม่เป็นแบบสองทิศทางอย่างสมบูรณ์ จากนั้นสิ่งนี้อาจต้องมีการแยกคำสั่งบางอย่างในสคริปต์เพื่อให้สองครึ่งทิศทางทำงานได้ คุณควรเปิดเผย (อาจเป็นคำถามอื่น) ปัญหาทั้งหมดของคุณ ตรวจสอบ https://xyproblem.info/ คุณคิดว่าคุณสามารถแก้ได้ด้วย Y = socat แต่เราไม่รู้อะไรเลยเกี่ยวกับ X แม้ว่า socat จะแก้ได้ ฉันก็บอกไม่ได้เพราะฉันไม่รู้ปัญหาของคุณ
hyogy avatar
us flag
ขอบคุณสำหรับความช่วยเหลือของคุณ !! ฉันจะถามคำถามใหม่และฉันจะแจ้งให้คุณทราบหากคุณต้องการ!(;
A.B avatar
cl flag
A.B
จริงๆแล้วสำหรับกรณีเฉพาะนี้ มันง่าย ยกเว้นว่าคุณมีปัญหากับเวลา: ไม่มีทางรู้ว่าการป้อนข้อมูลสิ้นสุดเมื่อใด ดังนั้นการสื่อสารจะต้องยุติก่อน และอาจจะไม่มีการตอบกลับกลับมาทันเวลา นี่คือบรรทัดที่จะใส่ใน myscript.sh : `exec base64 -d | socat - tcp:localhost:80` `-` หมายถึง STDIO และในขณะที่อินพุตมาจากเอาต์พุต `base64 -d` จะถูกส่งกลับโดยไม่ได้รับผลกระทบตามที่เขียนไว้ในความคิดเห็น
hyogy avatar
us flag
ฉันโพสต์คำถามที่เกี่ยวข้องหากคุณสนใจ (: https://serverfault.com/questions/1070792/bidirectional-communication-unidirectional-decode
A.B avatar
cl flag
A.B
คุณเพิ่งเขียนปัญหา XY ใหม่ ในขณะที่ฉันได้ให้คำตอบไว้ในความคิดเห็นแล้ว ความคิดเห็นของฉันบอกว่ามันทำงานแบบสองทิศทางในตอนท้าย ขออภัยหากนั่นไม่ใช่สิ่งที่ฉันเขียนในความคิดเห็นก่อนหน้า
hyogy avatar
us flag
ฉันได้โซลูชันที่สมบูรณ์แบบแล้ว โปรดตรวจสอบคำถามหากคุณต้องการ!(:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา