Aus*_*inM 5 python client subprocess execution
我有点麻烦.我想创建一个连接到服务器并使用子进程执行命令的简单程序,然后将结果返回给客户端.它很简单,但我不能让它工作.现在这就是我所拥有的:客户:
import sys, socket, subprocess
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
socksize = 1024
conn.connect((host, port))
while True:
shell = raw_input("$ ")
conn.send(shell)
data = conn.recv(socksize)
#msglen = len(data)
output = data
iotype = subprocess.PIPE
cmd = ['/bin/sh', '-c', shell]
proc = subprocess.Popen(cmd, stdout=iotype).wait()
stdout,stderr = proc.communicate()
conn.send(stdout)
print(output)
if proc.returncode != 0:
print("Error")
Run Code Online (Sandbox Code Playgroud)
服务器:
import sys, socket, subprocess
host = ''
port = 50106
socksize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: %s" %port)
s.listen(1)
print("Now listening...\n")
conn, addr = s.accept()
while True:
print 'New connection from %s:%d' % (addr[0], addr[1])
data = conn.recv(socksize)
cmd = ['/bin/sh', '-c', data]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE).wait()
stdout,stderr = cmd.communicate()
if not data:
break
elif data == 'killsrv':
sys.exit()
Run Code Online (Sandbox Code Playgroud)
威尔罗宾逊危险!
您是否真的希望以明文形式发送命令而无需通过网络进行身份验证?这非常非常危险.
好吧,我多次听到这个答案.我不想使用SSH我只是构建它以了解有关套接字的更多信息.如果我想将命令发送到系统,我不打算实际使用它. - 奥斯汀
我无法从你的问题中推断出这种崇高的追求.:-)
套接字模块是posix库上的一个薄层; 普通插座很乏味,很难做到.截至今天(2014年),异步I/O和并发性并不是Python最强大的特征之一 - 3.4开始改变这种特性,但是库会滞后一段时间.我的建议是花时间学习一些更高级的API,如Twisted(twistedmatrix.com/trac).如果你真的对低级别的东西感兴趣,那么请深入了解项目资源.
好的.关于如何使用扭曲这种类型的东西的任何想法? - 奥斯汀
请看twistedmatrix.com/documents/current/core/examples/#auto2
| 归档时间: |
|
| 查看次数: |
22452 次 |
| 最近记录: |