살다보면 누구나 한번쯤은 NMAP을 사용해서 사이트 스캔을 해보고 싶을 때가 있다.
오늘은 NMAP을 사용한 사이트 스캔을 해보도록 하겠다.
먼저 NMAP이란 네트워크 스캐닝 툴이다.
IP를 입력하고 스캔하면 어떤 포트가 열려있고 어떤 운영체제를 사용하는지, 어떤 프로토콜을 사용하고 버전을 뭔지를 알 수 있다.해커들이 해킹하기 전 탐색전을 하는 느낌이다.
※주의※ NMAP을 사용하여 허가된 연습용 사이트 외 다른 사이트를 악의적인 목적으로 스캔, 해킹하는 것은 불법 행위입니다.
그저 단순 스캔만 하는것은 처벌받지 않을 수 있지만 침입 시도로 간주되어 차단 혹은 ISP에서 경고를 받을 수 있습니다.
대기업들은 항상 비정상 트래픽을 모니터링 하고 있으니 단순 궁금증으로라도 시도하지 마시길 바랍니다.
나는 NMAP 공식 연습 서버인 scanme.nmap.org 을 스캔하도록 하겠다.
다만 제작사가 ' We support scanning of this machine, but only a few times a day. Don't scan it 100 times in a row or use this site to test your ssh brute-force password cracking tool.'이라고 했기에 너무 많이 스캔하거나 해킹 시도를 하는일은 없길 바라겠다.
추가로 wireshark를 사용해 어떤 패킷이 지나가는지도 알아보도록 하겠다.
wireshark는 패킷 스니퍼, 즉 네트워크 패킷 캡처, 분석 소프트웨어이다.
NMAP을 이용한 사이트 스캐닝

wireshark를 실행시킨 후 일단 scanme.nmap.org의 IP를 알아보도록 하겠다.
nslookup scanme.nmap.org

scanme.nmap.org의 IP를 알아냈다.
wireshark의 필터에 ip.addr == 45.33.32.156을 넣도록 하자.
그렇다면 이제 이 IP와 주고받는 패킷만 표시된다.
이제 스캔을 해보자.
nmap scanme.nmap.or.kr

이 명령어를 입력하자 wireshark에서 엄청난 양의 패킷들이 움직이는것을 볼 수 있다.
바로 nmap이 scanme.nmap.org를 스캔중인 것이다.
그렇게 잠시 시간이 지난 뒤 nmap의 스캔 결과가 뜰 것이다.
결과를 해석해보자면
Not shown: 990 closed tcp ports: 기본 스캔 1000개 포트 죽 990개가 closed상태.
22/tcp open ssh: ssh 서버 열려있음
80/tcp open http: 웹 서버 열려있음
9929, 31337은 nmap서버의 실습용 특수 서비스이다.
포트 상태는
● open: 응답이 왔다. 서비스가 돌고 있음.
● closed: 응답은 왔지만 "나 그 포트 안 씀"이라고 답함 (RST 패킷).
● filtered: 응답 자체가 없음. 방화벽이 막았거나, 패킷이 중간에 사라짐.
이제 wireshark에서 캡처된 패킷 몇 개를 살펴보겠다.
22번 포트인 ssh관련 패킷을 찾기 위해 ip.addr == 45.33.32.156 and tcp.port == 22를 추가하겠다.

여기서 우리는 흔히 아는 TCP의 3-way handshaking과는 조금 다른 모습을 볼 수 있다.
정상적인 3-way handshaking은 SYN → SYN/ACK → ACK형태이지만 패킷을 살펴보면 SYN → SYN/ACK → RST 형태인 것을 확인할 수 있다.
이는 nmap이 스캔을 할때 SYN scan을 사용하기 때문이다.
SYN → SYN/ACK → ACK 형태로 연결해야 서버 로그에 누가 접속했다고 기록됀다.
SYN scan은 마지막 ACK를 안 보내고 RST로 끊어버린다.
연결이 완성되지 않아서 일부 (오래된) 서버는 로그를 남기지 않는다.
물론 요즘 서버는 대부분 SYN 패킷도 로깅한다.
만약 Connect scan형식으로 스캔을 한다면

정상적으로 3-way handshaking을 수행하는것을 볼 수 있다.
이 외에도 nmap -sV scanme.nmap.org를 사용해 어떤 서비스, 버전을 사용하는지도 알 수 있다.

예시로 이 사이트는 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 를 사용하는것을 볼 수 있다.
이것을 해킹 관점에서 본다면 옛날 ssh 프로토콜을 사용하는걸 알고 구버전의 알려진 취약점을 찾아 공격하거나 하는 관점으로 볼 수도 있다.
책에서만 보던 프로토콜의 동작.
그리고 나는 wireshark를 살펴보며 재미있다 느낀것이 가끔 패킷 information에 who has 0.0.0.0? Tell 1.1.1.1같은게 뜰 때가 있다.
그리고 그 아래에는 0.0.0.0 is at 00:00:00:00:00:00 이라 나온다.
이는 물론 wireshark에서 패킷을 사람들이 간편하게 알아들을 수 있게 해둔 것이다.
진짜 패킷이 담고있는 정보는 wireshark 아래 나와있는 16진수들의
'0.0.0.0 의 맥 주소 누가 알아? 1.1.1.1이 물어보는 거야' 라고 하는것이다.

이 패킷은 ARP Request이다.
who has 0.0.0.0? Tell 1.1.1.1
●1.1.1.1 = Kali VM의 IP 주소 (물어본 쪽, 요청자)
● 0.0.0.0 = VirtualBox의 가상 게이트웨이 IP (답해야 할 쪽)
그리고 그 아래 패킷은 ARP Reply이다.
0.0.0.0 is at 00:00:00:00:00:00
● 0.0.0.0이 내 패킷 주소는 00:00:00:00:00:00 이라 말하는것.
다들 알고있는 ARP 프로토콜의 동작이다.
1. Kali: "0.0.0.0한테 보내야 하는데, MAC이 뭐지?"
2. Kali: ARP 캐시 확인 → 없음
3. Kali: 네트워크 전체에 방송 (Broadcast) " who has 0.0.0.0? Tell 1.1.1.1 "
4. 모든 기기가 이 방송을 들음
5. 0.0.0.0 본인만 응답 " 0.0.0.0 is at 00:00:00:00:00:00 "
6. Kali: MAC 알아냄 → ARP 캐시에 저장
7. Kali: 이제 실제 데이터 전송 가능
wireshark는 패킷이 담고 있는 이진 데이터를 ARP 프로토콜 스펙(RFC 826) 에 따라 분해한 다음 사람 친화적 문장으로 보여주는 것이다.
나는 이것이 마치 패킷들이 사람처럼 대화하는것 같이 느껴저 정말 재미있었다.
그냥 가만히 구경하기만 해도 책에서만 봤던 프로토콜들의 동작을 볼 수 있었다.
마치며...
오늘은 nmap을 활용해 아주 기초적인 네트워크 스캐닝을 공부해 보았다.
ARP, ICMP, IGMP 등 프로토콜의 실제 동작 방식을 보고 패킷의 흐름을 구경하다보니 시간가는줄 몰랐다.
네트워크 보안이 더욱 재미있어지는 하루였다.
'정보보안 공부' 카테고리의 다른 글
| Privilege Escalation과 Jailbreak (0) | 2026.05.31 |
|---|---|
| A Survey of Claude Mythos Preview's Cybersecurity Capabilities (0) | 2026.04.27 |
| Windows에서의 파티션 분할 과정에서 $Mft::$BITMAP문제에 대하여 (0) | 2026.04.23 |
| 칼리 리눅스 다운로드하기 (0) | 2026.04.21 |
| 정보보안 공부를 시작하기 전에.. (0) | 2026.04.14 |