Я действительно новичок в bash. У меня есть список доменов в файле .txt (URLs.txt
). Я также хочу иметь файл .csv, который состоит из 3 столбцов, разделенных ,
(myFile.csv
). Мой код читает каждую строку URLs.txt
(каждый домен), находит его IP-адрес и затем вставляет их в myFile.csv
(домен в первом столбце, его IP-адрес во 2-м столбце.
Name, IP
ex1.com, 10.20.30.40
ex2.com, 20.30.40.30
ex3.com, 10.45.60.20
ex4.com, 10.20.30.40
Здесь мой код:
echo "Name,IP" > myFile.csv # let's overwrite, not appending
while IFS= read -r line; do
ipValue= # initialize the value
while IFS= read -r ip; do
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
ipValue+="${ip}-" # append the results with "-"
fi
done < <(dig +short "$line") # assuming the result has multi-line
ipValue=${ipValue%-} # remove trailing "-" if any
if [[ -n $ipValue ]]; then
# if the IP is not empty
echo "$line,$ipValue" >> myFile.csv
fi
done < URLs.txt
Я хочу добавить еще один столбец в myFile.csv
для хранения открытых портов каждого IP-адреса. Поэтому вывод будет выглядеть так:
Name, IP, Port
ex1.com, 10.20.30.40, 21/tcp
ex2.com, 20.30.40.30, 20/tcp
ex3.com, 10.45.60.20, 33/tcp
ex4.com, 10.20.30.40, 21/tcp
Я хочу для этого используйте Nmap. После того, как я выбрал IP-адрес из 2-го столбца myFile.csv
и нашел его открытые порты с помощью Nmap, я хочу записать результат Nmap в соответствующую ячейку 3-го столбца.
Кроме того, если во втором столбце есть другой аналогичный IP-адрес, я хочу написать результат Nmap и для этой строки. Я имею в виду, что не хочу снова запускать Nmap для дублированного IP-адреса. Например, в моем примере есть два «10.20.30.40» во 2-м столбце. Я хочу использовать Nmap только один раз и для 1-го «10.20.30.40» (а также записать результат для 2-го «10.20.30.40», Nmap не должен запускаться для дублированного IP).
Чтобы это произошло, я изменил первая строка моего кода:
echo "Name,IP,Port" > myFile.csv
, а также вот код Nmap для поиска открытых портов:
nmap -v -Pn -p 1-100 $ipValue -oN out.txt
port=$(grep '^[0-9]' out.txt | tr '\n' '*' | sed 's/*$//')
, но я не знаю, что делать дальше и как применить эти изменения к моему коду.
Я обновил свой код до чего-то вроде этого:
echo "Name,IP" > myFile.csv # let's overwrite, not appending
while IFS= read -r line; do
ipValue= # initialize the value
while IFS= read -r ip; do
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
ipValue+="${ip}-" # append the results with "-"
fi
done < <(dig +short "$line") # assuming the result has multi-line
ipValue=${ipValue%-} # remove trailing "-" if any
if [[ -n $ipValue ]]; then
# if the IP is not empty
nmap -v -Pn -p 1-100 $ipValue -oN out.txt
port=$(grep '^[0-9]' out.txt | tr '\n' '*' | sed 's/*$//')
echo "$line,$ipValue,$port" >> myFile.csv
fi
done < URLs.txt
, но так Nmap использовался для поиска открытых портов дублированных IP-адресов. тоже, но я не хотел этого. Что мне делать?