티스토리 뷰

Computer

IP 확인 / IP 추적 프로그램

superroot 2021. 7. 16. 20:56
반응형

IP 확인 및 IP 추적 프로그램

 

IP 확인 / IP 추적 프로그램

 

Windows 컴퓨터에서 외부와 연결된 IP를 확인하기 위해서 사용하는 명령어로 netstat -ano | findstr "ESTABLISHED"가 있습니다. 이때 출력되는 remote IP를 각각 whois 홈페이지에서 입력하여 그 IP를 추적할 수 있지만, 관련 IP가 상당히 많이 나오기 때문에 모두 하나씩 확인하려면 반복작업으로 상당한 시간이 소요됩니다.

윈도 "명령 프롬프트"에서 netstat -ano | findstr "ESTABLISHED"을 입력하고, 출력되는 화면을 모두 DRAG 하여 마우스 오른쪽 클릭을 하게 되면, DRAG 된 부분이 "복사"되게 됩니다.
(WSL2에서 Ubuntu, Kali Linux를 실행하고 터미널에 붙여넣기 가능)
이 복사한 리스트를 리눅스에서 cat > ip_src.txt 명령어를 입력하고, 다시 마우스 오른쪽 클릭을 하게 되면 ip_src.txt 파일에 저장되게 됩니다.
하지만, protocol, source IP, status 등 불필요한 열(column)도 리스트에 모두 포함되게 되는데요, Linux에서 문자열을 가공하여 원하는 부분만 추출하면 한 번에 IP를 추적할 수 있습니다.

윈도 10, WSL2에 Ubuntu 또는 Kali Linux로 쉽게 shell 프로그래밍 및 실행이 가능합니다.
개발자가 아닌 일반인이라 해당 코드는 지저분할 수 있습니다. 이점 양해 바랍니다.

 

#!/bin/bash
IPLIST="$HOME/Documents/ipcheck/ip_src.txt"
IPLIST2=$(awk '{print $3}' $IPLIST | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"| sed -e s/:443//g -e s/:80//g -e s/^:*//g) 
for IP_SRC in $(echo $IPLIST2)
do 
    echo "whois $IP_SRC"
    whois $IP_SRC 
done

for ip in $(echo $IPLIST2); do whois $ip | echo "$ip $(grep 'OrgName')"; done > whois.txt

 

IP 추적 shell script

 

IP 추출을 위한 정규식 ( Regular expression for IP grep )

 

리스트에서 IP를 추출하는 정규식입니다. regular expression for IP grep과 같은 명령어로 구글링하여 조금 수정했습니다.

윈도 명령 프롬프트에서 복사한 리스트를 리눅스에서 cat > ip_src.txt로 만들 계획이기에, 해당 소스코드에 ip_src.txt를 추가했습니다. 

하지만, 2번째 column 역시 IP 형식이기 때문에, 추출 시 2번, 3번 column이 추출되게 됩니다.
awk 명령어를 먼저 사용해서 3번째 column만 추출하고 그다음으로 ip grep 정규식을 사용하면 될 것 같습니다.

 

IP GREP 관련 정규식

 

netstat -ano findstr "ESTABLISHED"

 

IP 추출을 위한 AWK 명령어 사용법

 

awk 명령어 사용

 

protocol, source IP, remote IP, Status 와 같이 4개의 Column에서 3번째 remote IP 부분만 프로그램에서 필요한데요.

awk '{print $3}' filename 

위 명령어로 filename에서 3번째 column($3)만 추출하게 됩니다.  tcp, 192로 시작하는 local IP, ESTABLISHED가 모두 빠지고 remote IP만 잘 추출이 되었습니다.

awk '{print $3}' filename > ip.txt 파일에 remote IP를 저장시켰습니다.

 

추적할 IP 리스트

 

awk 명령어로 추출된 IP LIST

 

하지만 추출된 IP뒤에 PORT NUMBER가 포함되어 있습니다. sed 명령어를 추가하여 443, 80번 포트등을 모두 제거하였습니다. 또는 파이프를 사용하여 awk -F: '{print $1}' 명령어를 사용하고 : 로 구분된 Flied $1번만 추출하는 방법도 있겠네요. 사용자에 맞게 수정해서 사용하시면 될 것 같습니다.

 

관련 awk 명령어

 

IP 추적 Shell script

 

for 반복문을 사용한 간단한 whois 프로그래밍

 

for ( ) 반복문을 사용하여 ip.txt 파일에 저장된 리스트를 하나씩 읽어들이고, whois 뒤에 각각 넣어서 바로 확인하는 간단한 shell script 입니다.

이렇게 사용하려면 ip_src.txt에서 3번째 열만 추출하여 ip.txt 파일로 저장하고 다시 프로그램을 실행해야 하는 불편함이 있습니다. 따라서 프로그램 앞에 자동으로 ip_src.txt 파일을 읽어서 3번째 열을 추출하고 이 결과에서 다시 port number를 삭제하는 명령을 반영했습니다. [블로그 상단에 추가한 shell script ]

 

whois 출력된 결과

 

또한 whois $IP_SRC와 같이 각각 명령어가 실행되면, 해당 IP에 대한 자료가 거의 1페이지씩 나오기 때문에 해당 자료에서 OrgName만 grep 하는 명령어도 추가해보았습니다. 이렇게 추가하면 리스트 옆에 바로 해당 OrgName이 표시되기 때문에 한 번에 확인이 가능합니다. [블로그 상단에 추가한 shell script ]

 

 

IP 추적 프로그램 시연

 

윈도 명령 프롬프트에서 netstat -ano | findstr "ESTABLISHED"를 입력하여, 복사할 내용을 그대로 drag 하고 "마우스 오른쪽 클릭"

그다음으로 WSL, Ubuntu 또는 Kali Linux에서 cat > ip_src.txt 명령어를 입력하고, 다시 "마우스 오른쪽 클릭"으로 붙여넣기하여 ip_src.txt 파일에 해당 리스트를 저장시켰습니다.

이제 ./ipcheck3.sh > result.txt와 같이 명령을 하면, whois IP 결과는 result.txt로 따로 저장이 되고, 한눈에 알아볼 수 있는 Remote IP 및 OrgName 의 결과가 whois.txt 파일에 저장이 됩니다. [블로그 상단에 추가한 shell script를 시연했습니다.]

cat whois.txt 명령을 실행해보면, 아래 이미지의 마지막 부분처럼 모든 IP의 관련 정보가 표시됩니다.

 

응용결과

반응형
댓글