Network

pypcap을 이용한 sniffer 만들기

__bo0o_ 2019. 5. 8. 03:16

 

python에서 Packet Capture Library 없나하고 찾아보다가

pypcap을 알게 되었습니다.

 

근데 pypcap에 대한 정보가 의외로 많이 없더라고요,,,

(사실 제가 못찾는 거 같아요,,)

 

혹시라도 제 글을 보고

도움이 되실 수도 있으니 포스팅 해보도록 하겠습니댜!

 

https://pypcap.readthedocs.io/en/latest/

먼저 pypcap 사용 예는 위 사이트에 친절하게 설명되어있습니다.

위 코드를 먼저 보신 다음 아래 글을 참고해주세요!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def sniffer(ifs, count, firstgetpacket):
 
    sniffer = pcap.pcap(name=ifs, promisc=True, immediate=True, timeout_ms=50)
    sniffer.setfilter('tcp and port 80')  # HTTP
 
    p = re.compile("GET ([a-zA-z0-9\/\.\_\?\=\&])* HTTP")
    for ts, pkt in sniffer: # When a packet comes in ... start...
 
        # packet check : print('%s\t' % str(pkt))
 
# GET packet
        result = p.search(str(pkt))
         if bool(result) is True:
            print('%s\t' % str(pkt))
 

 

예제를 응용하여

HTTP GET 패킷을 스니핑하는 sniffer를 구현해봤습니다.

 

들어오는 패킷에서

sniffer.setfilter("tcp and port 80")

HTTP 필터를 걸어주고

 

p = re.compile("GET ([a-zA-Z0-9\/\.\_\?\=\&])* HTTP")

정규식을 통해 GET 패킷을 찾아준 후에

 

result = p.search(str(pkr))

일치하는 패킷의 결과를 받아

 

if bool(result) is True:

print('%s\t' % str(pkt))

GET 패킷을 출력해주시면 됩니다.

 

 

만약 GET 패킷이 아닌

모든 패킷을 스니핑하고 싶으시다면

print('%s\t' % str(pkt))

print(bool(result)

부분의 주석을 지우고 사용해주시면 됩니다. 간단하죵?!

 

 

 

그리고 만약

인터넷을 들어갔을 때의 패킷들은 잘 잡히지만

내가 보낸 패킷의 응답이 스니퍼에 잡히지 않는다면

인터페이스를 변경해주세요!

 

이후 위와 같이 내가 보낸 패킷을 확인할 수 있습니다.

 

 

http sniffer 전체 코드는 아래를 참고해주세요.

https://github.com/insecurity22/WebVulnerability-Team3/blob/master/webpkg/sqlinjection/httpget_sniffer.py

 

insecurity22/WebVulnerability-Team3

Aimed at OWASP top 10. Contribute to insecurity22/WebVulnerability-Team3 development by creating an account on GitHub.

github.com

 

참고

https://www.programcreek.com/python/example/91670/pcapy.findalldevs

소켓을 이용한 스니퍼

'Network' 카테고리의 다른 글

Wireshark filter 정리  (0) 2022.07.26
암호화/복호화, 암호 알고리즘  (0) 2018.12.25
Form 태그, GET, POST 방식  (0) 2018.12.25