2016-03-07 68 views
1

沟通VM上我用命令:NC -l -p 8221 -e /斌/ bash和做了python3脚本:插座不能与netcat的庆典

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”,它只是加载,但从来没有运行。 当,而不是运行python脚本我会运行nc 192.168.1.60 8221,它会正常工作。任何想法为什么?

+0

定义“不起作用”。你有'connect'的异常吗?什么是错误信息? –

+0

@JohnKugelman我会编辑的问题,好评 –

+0

你是什么意思它“加载但从未运行”?你看到'开始连接'吗?如果你按下Ctrl-C,它会卡住什么?请尽可能详细。 –

回答

1

input()documentation

然后该功能可以读取从输入的线,将其转换成字符串 (剥离的后换行),并返回。

但Bash运行在规范模式下,不会处理输入,直到新行到达。这不会发生,导致永久阻止recv

user = input("what to send?: ")后面加上+ '\n'来修复它。

+0

这确实是我的问题的答案,但仍然有些奇怪。可以说有一个错误(例如:pwds),没有输出,没有“bash语法错误”。 –

+1

错误被写入'stderr',而不是'stdout'。使用'-e'/ bin/bash 2>&1''让netcat发送两个流到客户端。 – a3f

+0

哇!非常感谢!我有1个最后一个问题,可以说我想让用户发出一个新的请求而没有收到任何回应,我是否必须使用线程模块?我想独立地实现其他服务(例如:ftp)。 EX:当FTP连接或nmap扫描同时运行时,我仍然与nc通信。 –