2016-03-07 70 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通信。 –