簡體   English   中英

一段時間內的netcat讀取循環立即返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM