[英]netcat inside a while read loop returning immediately
我正在為自己制作菜單,因為有時我需要搜索(或NMAP哪個端口)。 我想做與在命令行中運行命令相同的操作。
這是我的一段代碼:
nmap $1 | grep open | while read line; do
serviceport=$(echo $line | cut -d' ' -f1 | cut -d'/' -f1);
if [ $i -eq $choice ]; then
echo "Running command: netcat $1 $serviceport";
netcat $1 $serviceport;
fi;
i=$(($i+1));
done;
它使用nmap掃描所有內容后立即關閉。
請勿將FD 0(stdin)用於讀取循環和netcat。 如果不區分這些流, netcat
可以使用nmap | grep
發出的內容nmap | grep
nmap | grep
管道,而不是讓該內容由read
。
這會產生一些不良影響:while / read循環的其他部分不會執行,並且netcat
看到封閉的stdin流,並且在消耗管道內容時會退出(因此,您不會獲得對netcat的交互式控制,您要完成的任務)。 解決此問題的一種簡單方法是將nmap管道的輸出輸入到非默認文件描述符中。 下面,我正在使用FD 3。
這段代碼有很多錯誤,超出了問題的范圍,因此,請不要考慮我復制粘貼的部分認可,但是:
while read -r -u 3 line; do
serviceport=${line%% *}; serviceport=${serviceport##/*}
if [ "$i" -eq "$choice" ]; then
echo "Running command: netcat $1 $serviceport"
netcat "$1" "$serviceport"
fi
done 3< <(nmap "$1" | grep open)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.