본문 바로가기

오늘 배운 내용

파이썬 Python [활용] : Scapy를 통해서 특정 망 내에서 디바이스 정보 가지고 오기

 

Scapy는 컴퓨터 네트워크를 위한 패킷 조작 도구입니다.

패킷을 위조 또는 디코딩하고, 유선으로 전송하고, 캡처하고, 요청과 응답을 일치시킬 수 있습니다.

[위키피디아 참고]


Scapy 문서 : https://scapy.readthedocs.io/en/latest/index.html


패킷을 이용한 파이썬 코딩

참고 : http://github.com/secdev/scapy

같은 망(와이파이), 네트워크 안에 있는 디바이스 간의 패킷을 주것 받는 것


배우는 것 : 패킷

선행지식 : 파이썬

득템 가능 지식 : 같은 네트워크망에 패킷 날리기 (scapy)

필요한 아이템 : 집에 사람이 오면 알려주는 프로그램


Scapy

Sniffing : 패킷 염탐하기

Spoofing : 다른 사람인척 하기

Manipulating : 패킷 조작하기


설치 라이브러리

pip install --pre scapy[basic]

 

기본적인 코드 코드

import scapy.layers.l2

net = 'ip주소/24' # 공유기 ip 주소를 넣어준다. => 공유기 주소/24 => '/24'를 붙여주는 이유는 주소의 범위가 0-255 사이라는걸 알려주기 위해서
ans, unans = scapy.layers.l2.arping(net, timeout=1, verbose=False) # 공유기에 연결된 기기들에 패킷을 보내고 응답을 받는다
# net의 주소를 받고(net), 응답시간은 1초(timeout=1), 로그 기록은 보는것으로(verbose= True)
# 응답받은것은 ans에 저장, 응답을 받지 못한 것은 unans에 저장

for sent, received in ans.res:
    ip = received.psrc #응답한 기기의 ip주소
    mac = received.hwsrc # 응답한 기기의 MAC 주소

    print('%s\t%s' %(ip, mac))

 

같은 망에 접속 했을 때 응답이 오게 하는 코드

import scapy.layers.l2
import time

net = 'ip주소/24' # 공유기 ip 주소를 넣어준다. => 공유기 주소/24 => '/24'를 붙여주는 이유는 주소의 범위가 0-255 사이라는걸 알려주기 위해서
someone = '특정디바이스의 mac주소'


while True:
    ans, unans = scapy.layers.l2.arping(net, timeout=1, verbose=False) # 공유기에 연결된 기기들에 패킷을 보내고 응답을 받는다
    # net의 주소를 받고(net), 응답시간은 1초(timeout=1), 로그 기록은 보는것으로(verbose= True)
    # 응답받은것은 ans에 저장, 응답을 받지 못한 것은 unans에 저장

    for sent, received in ans.res:
        ip = received.psrc #응답한 기기의 ip주소
        mac = received.hwsrc # 응답한 기기의 MAC 주소

        if mac == someone:
            print('someone is detected')

        time.sleep(0.2) # 0.2 초 딜레이
        # print('%s\t%s' %(ip, mac))

 


scapy 에러 - winpcap

 

RuntimeError: Sniffing and sending packets is not available at layer 2: winpcap is not installed. You may use conf.L3socket orconf.L3sockett6 to access layer 3

 

해결법 ⇒ 구글에 winPcap 설치 검색 → winpcap 설치