การเชื่อมต่อ Netcat ปิดลงหลังจากเชื่อมต่อผ่านหลาม


0

ดังนั้นฉันจึงติดตั้ง Netcat บนราสเบอร์รี่ pi และ mac ของฉันและฉันสามารถทำให้พวกมันเชื่อมต่อได้อย่างง่ายดาย ปัญหาคือถ้าฉันต้องการสคริปต์ python บน mac ของฉันเพื่อสร้างการเชื่อมต่อเมื่อราสเบอร์รี่ pi กำลังฟังการเชื่อมต่ออยู่แล้ว มันจะเชื่อมต่อ แต่จากนั้นจะปิดการเชื่อมต่อโดยไม่เจตนา ฉันใช้รหัสนี้

Import os os.popen("nc -v [MY IP] [Port]")

เหตุผลที่ฉันต้องการทำเช่นนี้คือฉันสามารถส่งคำสั่งผ่าน python ผ่าน Netcat Eg

os.popen("Hello other computer")

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ขอบคุณ

คำตอบ:


0

ปัญหาน่าncจะเป็นการเชื่อมต่อแบบสองทาง แต่popen()ใช้เพียงวิธีเดียว เมื่อเซิร์ฟเวอร์ระยะไกลพยายามอ่านจากการเชื่อมต่อ nc จะอ่านจาก stdin ซึ่งคุณไม่ได้ตั้งค่าดังนั้นจึงอาจได้รับ eof และการเชื่อมต่อจะปิดลง

แทนการใช้แบบสองทิศทางpopen()subprocess.Popen()

import subprocess
cmd = "nc -v [MY IP] [Port]"
p = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

จากนั้นคุณสามารถทำได้msg = p.stdout.readline()หรือp.stdin.write("reply\n")หรือp.communicate(...)ที่อธิบายไว้ในเอกสารออนไลน์pydoc subprocess.Popenหรือ


หรืออีกวิธีหนึ่งคุณสามารถเปลี่ยนncและใช้ซ็อกเก็ตได้ใน python มันไม่ยากโดยเฉพาะอย่างยิ่ง ตัวอย่างเช่นในฐานะลูกค้า:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MY_IP, PORT))
s.send('Hello, world')
print s.recv(1024) # read reply
s.close()

ขอบคุณ. ฉันคิดว่าฉันยังอาจใช้ subprocess มากกว่าซ็อกเก็ตหลามพื้นเมืองเพราะในตอนท้ายเป็นราสเบอร์รี่ pi ใช้ servoblaster ดังนั้นด้วย subprocess ฉันไม่จำเป็นต้องใช้ python ที่ด้าน pi นอกจากนี้ด้วย nc มันง่ายมากที่จะเขียนไปยังไฟล์อุปกรณ์ servoblaster โดยใช้ '> / dev / servoblaster' แต่ด้วยซ็อกเก็ตฉันจะต้องเปิดไฟล์อุปกรณ์จากนั้นเขียนมันแล้วล้างออกหรือปิดหรืออะไรบางอย่าง
ferret249
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.