usrbin
컴퓨터 일기
usrbin
전체 방문자
오늘
어제

공지사항

  • whoami
  • 분류 전체보기 (127)
    • 깔짝할짝 (61)
    • 잡지식 (30)
    • Network (7)
      • Programming (3)
      • Study (4)
    • Mobile (13)
    • Reversing (5)
      • Win API (2)
      • 분석 (0)
    • Kernel (4)
      • linux (1)
      • Windows (3)
    • Programming (5)

블로그 메뉴

  • 홈
  • 방명록

인기 글

태그

  • nethunter
  • Network Programming
  • Packet
  • System Hacking
  • xcz.kr
  • x64dbg
  • PWN
  • pcapng
  • pwnable.kr
  • Reversing
  • pwntools
  • pcap
  • HackCTF
  • forensics
  • Hive Ransomware
  • Digital Forensics
  • suninatas
  • sql injection
  • Pwnable
  • Scapy
  • System
  • Follina
  • HEVD
  • BOF
  • Android
  • ftz
  • libpcap
  • qt
  • network
  • monitor mode

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
usrbin

컴퓨터 일기

[Scapy] IP scan
Network/Programming

[Scapy] IP scan

2020. 1. 26. 17:40

Scapy를 이용한 간단한 IP 주소 스캐닝 툴입니다. 같은 네트워크 내에 있는 호스트들의 IP 주소와 MAC 주소를 알아올 수 있다(arp 이용). 사실 성능이나 이런 저런 면은 생각하지 않고 단순히 Scapy를 사용해서 간단하게 스캐닝 하는 방법을 이용한것이므로 실제 사용하기에는 무리가 있음 ㅎ

from scapy.all import *
import sys

s=[]

for i in range(1,255):
        ##서브넷 주소만 입력받기
	arp_req=Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(op=1, pdst=sys.argv[1]+"."+str(i))
	arp_ans=srp1(arp_req, timeout=0.5)
	if arp_ans:
                ##존재한다면 저장
		s.append(str(sys.argv[1]+"."+str(i)+" is at "+arp_ans[ARP].hwsrc))

##실행중인 호스트들 출력
for j in range(0,len(s)):
	print(s[j])

ARP 요청을 보내서 올바른 응답이 온다면 해당 호스트가 존재하는 것으로, 응답이 오지 않는다면 호스트가 존재하지 않는 것으로 판단하는 코드를 작성했다.

먼저 실행 인자로 서브넷 주소만 입력

끝까지 스캐닝이 끝나고 나면

위처럼 같은 네트워크 상에 존재하는 호스트들의 IP 주소와 네트워크 주소를 받아올 수 있게 된다

arp_req=Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(op=1, pdst=sys.argv[1]+"."+str(i))

Scapy는 위처럼 네트워크 레이어 별 패킷 헤더를 구성할 수 있는 함수들을 제공한다. Ether 함수의 dst를 ff:ff:ff:ff:ff:ff로 설정하므로써 Broadcast 할 수 있고, 다음 ARP 헤더는 opcode 1, 즉 요청 패킷임을 명시하고 pdst(==IP destination)를 입력받은 서브넷 내에 있는 모든 IP 주소들로 보내면서 동일 네트워크 내에 있는 모든 호스트들에게 ARP 요청 패킷을 보낼 수 있음

arp_ans=srp1(arp_req, timeout=0.5)
	if arp_ans:
                ##존재한다면 저장
		s.append(str(sys.argv[1]+"."+str(i)+" is at "+arp_ans[ARP].hwsrc))

응답을 받는 함수는 srp1()입니다. 이를 사용하여 응답을 받고, 응답이 존재한다면 리스트에 append 하여 응답의 hwsrc, 즉 존재하는 호스트가 응답을 주었다면 해당 호스트의 IP 주소와 MAC 주소를 저장하도록 했다.

무지하게 간단한 코드라 쓸지 말지 고민을 했지만... Scapy를 시작하기에는 적당히 괜찮은 함수도 사용한 예제라고 생각합니다 훗훗

저작자표시 비영리 변경금지 (새창열림)

'Network > Programming' 카테고리의 다른 글

[Network programming] Wireshark staitistics 따라하기  (0) 2020.01.24
[Network programming] pcap library를 사용한 패킷 정보 출력  (0) 2020.01.23
    usrbin
    usrbin
    컴퓨터 할거야

    티스토리툴바