Python 插座可以';不能与netcat bash通信

Python 插座可以';不能与netcat bash通信,python,sockets,netcat,Python,Sockets,Netcat,在虚拟机上,我使用命令nc-l-p8221-e/bin/bash并编写了一个python3脚本: def netcat(): print ("starting connection") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("192.168.1.60", 8221)) while True: user = input("what to send?:

在虚拟机上,我使用命令nc-l-p8221-e/bin/bash并编写了一个python3脚本:

def netcat():
    print ("starting connection")    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("192.168.1.60", 8221))
    while True:
        user = input("what to send?: ")
        s.sendall(bytes(user, "utf-8"))
        time.sleep(5)
        word = "bob"
        data = s.recv(4096)
        if data == b"":
            pass
        else:
            data = data.decode("utf-8")
            print ("Received:", repr(data))
    print ("Connection closed.")
    s.shutdown(socket.SHUT_WR)
    s.close()
netcat()
这个脚本不起作用。我所说的“不工作”是指当我用python脚本运行命令时,比如说“pwd”,它只是加载,但从不运行。 当我运行nc192.168.1.608221而不是运行python脚本时,它就可以正常工作了。你知道为什么吗?

来自
input()
的:

然后,函数从输入中读取一行,将其转换为字符串 (剥离尾随换行符),并返回该换行符

但Bash是在规范模式下运行的,在新行到达之前不会处理输入。这不会发生,会导致
recv
永远阻塞


user=input(“发送什么?:”)
之后添加
+'\n'
以修复它。

定义“不工作”。您是否从
connect
中获得异常?错误信息是什么?@JohnKugelman我会编辑这个问题,很好的评论“加载但从不运行”是什么意思?您是否看到
正在启动连接
?如果你按Ctrl-C,它卡在哪一行上?请尽量详细。这确实是我问题的答案,但仍然有一些奇怪的地方。假设有一个错误类型(例如:pwds),没有任何输出,没有“bash语法错误”。错误被写入
stderr
,而不是
stdout
。使用
-e'/bin/bash 2>&1'
让netcat将两个流都发送到客户端。哇!非常感谢你!我还有最后一个问题,假设我想让用户在没有收到任何响应的情况下发出一个新的请求,我必须使用线程模块吗?我想雇用其他服务(例如:ftp)独立。例如:当ftp正在连接或同时运行nmap扫描时,我仍然与nc通信。使用
选择
可以同时等待套接字和stdin。然后,您可以在后台运行进程,例如
(sleep 2s;echo'hello')&
,并异步接收它们的输出。但是请记住,对于严肃的使用,有
ssh
。我不理解后台进程。为了澄清,这些进程不是在远程主机上启动的,而是我的主机启动的。我认为唯一可能的方法是使用线程、操作系统或子进程。你在你的例子中提到过这些吗?