2016-12-03 44 views
0

我試圖殺死一個Python腳本的TCP連接。 tcpkill運行,但給出了任何數據傳送該消息:tcpkill:寫:操作不允許與子進程.Popen

tcpkill: write: Operation not permitted 
***.***.***.***:48868 > ***.***.***.***:6905: R 1868230658:1868230658(0) win 0 

我的Python代碼是:

@staticmethod 
    def kill_connection(ip, interface="eth0"): 
     def tcp_kill(ip, interface): 
      logging.info('Killing ' + ip + ' connection with tcpkill.') 
      p = subprocess.Popen('/sbin/tcpkill -i ' + interface + ' -9 ip host ' + ip, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True) 
      time.sleep(30) 
      p.terminate() 

     t = threading.Thread(target=tcp_kill, args=(ip, interface)) 
     t.daemon = True 
     t.start() 

我試圖「shell」選項是開/關,預執行功能設定爲OS .setguid。沒有機會。

手動運行tcpkill可以正常工作。

這是什麼原因造成的,以及如何讓它正確運行?

+0

你是否以root身份運行腳本? –

+0

是的,root運行腳本 – beremaran

+0

請嘗試運行tcpkill命令「手工」,作爲根在你的bash shell中,看看結果是否一樣 –

回答

1

你會想要把你的kill命令放到一個數組而不是一個字符串中。

@staticmethod 
def kill_connection(ip, interface="eth0"): 
    def tcp_kill(ip, interface): 
     logging.info('Killing ' + ip + ' connection with tcpkill.') 
     p = subprocess.Popen(['/sbin/tcpkill', '-i ', interface, '-9', 'ip', 'host', ip], 
          stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True) 
     time.sleep(30) 
     p.terminate() 

    t = threading.Thread(target=tcp_kill, args=(ip, interface)) 
    t.daemon = True 
    t.start()