그래서 쉘에서 다음 명령을 실행합니다.
~/for ip in $(cat ip_list);do mkdir $ip; cd $ip; for vuln in $(snmap http);do nmap --script=$vuln $ip -oN $vuln;done cd ../ ; done
그리고 약 하루 정도 정상적으로 실행되었습니다. 디렉토리를 올바르게 생성하고 탐색합니다.
그러나 이제 스크립트 중 하나가 중단되었습니다...
그래서 제가 하고 싶은 것은 CTR+C와 같은 핵심 명령을 사용하여 실행 중인 스크립트를 종료하지 않고 nmap의 반복을 종료하는 것입니다. 이렇게 하면 처음부터 시작하거나 IP 목록을 수정할 필요가 없습니다.
답변1
이 답변은 Bash에만 해당됩니다.
이를 위해 트랩을 사용할 수 있습니다. 이것은 예시적인 예입니다. 루프를 계속하려면 Ctrl+ 를 사용하세요 c. 터미널을 닫거나 다른 터미널에서 종료하는 것 외에는 스크립트를 중지할 수 있는 방법이 없습니다.
#!/bin/bash
trap ps SIGINT
for i in a b c d; do
for j in w x y z; do
echo ----$i$j------ && ping stackexchange.com -c 10
done
done
exit
귀하의 스크립트는 다음과 같을 것입니다(제가 일부 개선한 내용 포함). 하지만 아직 테스트되지 않았습니다.
#!/bin/bash
trap '' SIGINT
for ip in $(cat ip_list); do
mkdir $ip && cd $ip &&
for vuln in $(snmap http);do
nmap --script=$vuln $ip -oN $vuln
done &&
cd ..
done
제가 도입한 변경 사항은 &&
오류가 발생할 수 있는 논리적 경로 입력을 방지합니다. 가능하다면 그러한 제한을 가하는 것이 더 안전할 것입니다. 이렇게 말하면:
mkdir $ip; cd $ip;
디렉터리를 만들 수 없으면 cd
오류가 발생합니다.
당신이 이렇게 말할 때:
mkdir $ip && cd $ip
어떤 이유로 디렉터리가 생성되지 않은 경우에는 cd
시도가 이루어지지 않습니다. mkdir $dir
에서 까지의 cd $dir
모든 명령을 cd ..
연결 하면 &&
논리가 명확해지고 구조가 잘못되지 않습니다. 디렉토리를 사용 ;
하고 생성하는 데 실패하면 해당 디렉토리에 들어갈 수 없지만 아마도 ..
.
답변2
제가 게시한 후 답변한 것을 알고 있지만 다른 사람이 이 문제에 직면할 경우를 대비해 이 답변을 유지하고 싶었습니다.
내가 한 일은 다른 쉘에서 실행한 ps -a
다음 nmap 프로세스를 찾아 kill proc-id
. 스크립트는 다음 반복으로 계속됩니다.