nmap -p 및 cat 'file'을 사용하는 방법은 무엇입니까?

nmap -p 및 cat 'file'을 사용하는 방법은 무엇입니까?

nmap -p를 사용하여 여러 IP 및 포트에서 "특정" 포트 스캔을 실행할 수 있는 간단한 bash 스크립트를 만들려고 합니다. 내가 겪고 있는 문제는 .txt 파일에서 포트 번호와 IP를 읽을 때 텍스트 파일에 포트와 IP 사이에 필요한 공간이 있지만 이로 인해 스크립트가 실패한다는 것입니다. 내 코드는 다음과 같습니다. 나는 이것을 간단하게 만들려고 노력하고 있습니다. 내가 생각할 수 있는 유일한 다른 것은 배열을 만드는 것입니다. 그러나 심지어 그때에도 nmap -p 포트 형식을 스캐닝하는 것은 동일한 문제가 있을 것이라고 생각합니다. 어떤 제안이 있으십니까?

for i in $(cat 'filepathway')

do
nmap -p $i

done

다음과 같이 합니다: nmap -p 'port#'

대신: nmap -p 'Port#' 'IP#'

.txt는 다음과 같습니다. (값은 무작위입니다)

23001 172.55.545.254
23002 172.55.545.254

...

답변1

for i in $(cat file); ...

파일은 한 줄씩 읽히지 않고 단어 단위로 읽혀집니다.

당신은 그것을 사용할 수 있습니다 while read ...:

while read port ip; do
    nmap -p "$port" "$ip"
done < "file"

또한보십시오:쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?

답변2

문제는 루프가 분할 확장에서 각 단어를 개별적으로 읽는다는 것입니다 $(cat filepathway). 포트 번호, IP 주소, 다른 포트 번호 등이 될 수 있습니다. 일반적으로 루프 확장 명령 대체는 메모리가 비효율적이고, 발생한 오류 유형 및 기타 오류가 발생하기 쉽고, 명령의 전체 결과가 메모리에 읽혀질 때까지 루프 실행이 시작되지 않기 때문에 피해야 합니다.

포트 번호가 아닌 경우 nmap다음 명령을 사용하여 IP 주소 목록을 읽을 수 있습니다 -iL.

nmap -iL addr.list

...또는 특정 범위의 포트를 포괄하려는 경우

nmap -p 23000-23100 -iL addr.list

이제 할 수 있는 일은 xargs다음과 같이 사용하는 것입니다.

xargs -L 1 nmap -p <addr.list

그러면 각 줄을 읽고 주어진 명령을 실행한 nmap -p다음 포트 번호와 IP 주소를 실행합니다.

가장 일반적인 구현에서는 숫자 옵션 인수가 있는 옵션을 사용하여 많은 병렬 호출을 실행할 xargs수 있습니다 ( 시스템 설명서 참조).-Pxargs

여전히 루프를 사용하려면 각 줄에서 포트 번호와 IP 주소를 개별적으로 읽어야 합니다(예:pLumo가 표시됩니다.):

while read -r port ip; do
    nmap -p "$port" "$ip"
done <addr.list

관련 정보