2011-06-07 157 views
12

如何使用不具有-e選項的netcat版本模擬netcat -e仿真netcat -e

我需要遠程觸發一個命令。我可以用netcat的做到這一點 - 不-e

#/斌/慶典

的netcat -l 8080; myCommand.sh

那會做的伎倆,但想回復取決於命令的成功或失敗的客戶端(有一種REST的 - 類似的界面)。

我該怎麼做?

謝謝!

+2

你能用這個命名管道嗎? – Lynch 2011-07-04 05:04:27

回答

4

最好的方法是切換到支持它的netcat版本。在Debian/Ubuntu的IIRC正確,您應該netcat的使用傳統,不NETCAT OpenBSD的

sudo apt-get install netcat-traditional # netcat-openbsd 

您必須指定明確地定義你需要哪個版本的選項:

nc.traditional server 6767 -e myscript.sh 

nc.openbsd -l 6767 

注期權使用的細微差異)。正如你所看到的(下面),nc.traditional可以作爲獨立的二進制文件運行,這取決於libc和linux本身,所以如果你沒有安裝權限,你應該可以在的某個地方放置獨立的二進制文件當然是有exec權限的文件系統),然後運行它像

/home/user/bin/mynetcat server 6767 -e myscript.sh 

HTH


$ ldd `which nc.{traditional,openbsd}` 

/bin/nc.traditional: 
    linux-gate.so.1 => (0xb7888000) 
    libc.so.6 => /lib/libc.so.6 (0xb7709000) 
    /lib/ld-linux.so.2 (0xb7889000) 
/bin/nc.openbsd: 
    linux-gate.so.1 => (0xb77d0000) 
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb76df000) 
    libc.so.6 => /lib/libc.so.6 (0xb7582000) 
    libpcre.so.3 => /lib/libpcre.so.3 (0xb754c000) 
    /lib/ld-linux.so.2 (0xb77d1000) 
+0

備案,那不是什麼'靜態鏈接'的意思。 – Random832 2011-06-08 00:17:25

+0

是的,我知道,這就是爲什麼我拼寫出來的依賴:)什麼將_you_稱之爲? '部分靜態鏈接','大部分靜態鏈接','獨立二進制'?嗯...,也許後者不會那麼糟糕! **編輯**,thx – sehe 2011-06-08 06:26:14

+0

謝謝,但我不喜歡用「隨機二進制」分發我的小腳本的想法。另外我需要在開發機器(32位)上測試它,並在臨時服務器上部署(64位)。 – user787935 2011-06-08 12:17:01

12
mkfifo foo 
nc -lk 2600 0<foo | /bin/bash 1>foo 

然後,只需NC SE rvername 2600和./script.sh

用ctrl + c殺死客戶端