Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pypacker — :package: Python을 위한 가장 빠르고 간단한 패킷 조작 라이브러리 | Kitploit
도구/GitLabGitLab/mike01/pypacker
Packet Sniffing & AnalysisWeb Proxies & InterceptionNetwork SecurityPenetration TestingUtilities & FrameworksRed Teaming
GitLabmike01/pypacker

pypacker

📦 Python을 위한 가장 빠르고 간단한 패킷 조작 라이브러리

저장소 보기
281823일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

일반 정보

이것은 Pypacker입니다: Python을 위한 가장 빠르고 간단한 저수준 패킷 조작 라이브러리입니다. 아래 예제에서 무엇을 할 수 있는지 확인하세요.

이 프로젝트를 지원하려면 PayPal을 통해 Donate with PayPal 할 수 있습니다.

Pypacker로 할 수 있는 것

  • 키워드 또는 원시 바이트로 사용자 정의 패킷을 생성하고 Python으로 데이터를 읽거나 변경하세요: examples/create_packets.py
  • pcap 파일에서 패킷을 읽고 쓰세요 (Wireshark/tcpdump pcap 형식만 지원): examples/pcap_read_write.py
  • 여러 pcap 파일을 하나의 파일로 병합하세요. 손상된 pcap 파일 읽기를 시도하고 콜백으로 필터링할 수 있습니다: examples/pcap_merge.py
  • 레이어 2 패킷을 송수신하세요: examples/send_receive_l2.py
  • 패킷을 가로채거나 수정하세요. 예: MITM: examples/interceptor3.py

사전 요구 사항

  • Python 3.x (CPython, Pypy, Jython 또는 기타 인터프리터)
  • 선택 사항: netifaces >=0.10.6 (유틸리티용)
  • 선택 사항 (인터셉터용):
    • CPython
    • NFQUEUE 대상을 지원하는 커널이 있는 Linux 기반 시스템. 커널 구성 옵션은 다음 위치에 있습니다:
      • Networking Options -> Network packet filtering -> Core Netfilter -> NFQUEUE target
    • iptables (대안: nftables)
      • NFQUEUE 관련 규칙은 예를 들어 "iptables -I INPUT 1 -j NFQUEUE --queue-num 0"와 같이 추가할 수 있습니다.
    • libnetfilter_queue 라이브러리 (http://www.netfilter.org/projects/libnetfilter_queue 참조)

설치

일부 예시:

  • 최신 버전 클론
    • git clone https://gitlab.com/mike01/pypacker.git
    • cd pypacker
    • python setup.py install

pip/pypi는 복잡한 인증 메커니즘 때문에 더 이상 지원되지 않습니다. 죄송합니다.

사용 예제 및 문서

참조:

  • 위의 예제들
  • ./examples 디렉토리의 예제들
  • Gitlab Wiki: https://gitlab.com/mike01/pypacker/-/wikis/home

프로토콜 자체(layerXYZ 참조)는 일반적으로 문서가 많지 않습니다. 해당 프로토콜들은 각자의 RFC/공식 표준으로 문서화되어 있기 때문입니다.

테스트

테스트는 다음과 같이 실행됩니다:

  1. Pypacker 디렉토리를 PYTHONPATH에 추가하세요.
  • cd pypacker
  • export PYTHONPATH=$(pwd):$PYTHONPATH
  1. 테스트 실행
  • python tests/test_pypacker.py

성능 테스트 결과:

root@kitploit:~
Hardware: Intel CPU, 4 Cores @ 3.2 GHz
Python: CPython v3.10

nr = new results on this machine
Rounds per test: 10000
=====================================
>>> Packet parsing (Ethernet + IP + UDP + DNS): Search UDP port
Time diff: 0.1409761905670166s
nr = 70933 p/s
>>> Packet parsing (Ethernet + IP + TCP + HTTP): Search TCP port
Time diff: 0.3157649040222168s
nr = 31669 p/s
>>> Packet parsing (Ethernet + IP + TCP + HTTP): Reading all header
Time diff: 0.5989120006561279s
nr = 16696 p/s
>>> Parsing first layer (IP + ICMP)
Time diff: 0.014587163925170898s
nr = 685534 p/s
>>> Creating/direct assigning (IP only header)
Time diff: 0.02884364128112793s
nr = 346696 p/s
>>> bin() without change (IP)
Time diff: 0.013646364212036133s
nr = 732795 p/s
>>> Output with change/checksum recalculation (IP)
Time diff: 0.07719659805297852s
nr = 129539 p/s
>>> Basic/first layer parsing (Ethernet + IP + TCP + HTTP)
Time diff: 0.019113540649414062s
nr = 523189 p/s
>>> Changing Triggerlist element value (Ethernet + IP + TCP + HTTP)
Time diff: 0.017654895782470703s
nr = 566415 p/s
>>> Changing dynamic field (Ethernet + IP + TCP + HTTP)
Time diff: 0.006037473678588867s
nr = 1656321 p/s
>>> Direct assigning and concatination (Ethernet + IP + TCP + HTTP)
Time diff: 0.2050457000732422s
nr = 48769 p/s
.>>> Performance test pypacker vs. dpkt vs. scapy
Comparing pypacker, dpkt and scapy performance (parsing Ethernet + IP + TCP + HTTP)
nr = new results on this machine
Rounds per test: 10000
>> Testing pypacker parsing speed
nr = 194382 p/s
>> Testing dpkt parsing speed
Could not execute dpkt tests: ModuleNotFoundError("No module named 'dpkt'")
>> Testing scapy parsing speed
nr = 2775 p/s

FAQ

남은 질문이 있으면 버그로 등록해 주세요("questions"로 태그됩니다).

Q: pypacker는 얼마나 빠른가요?

A: 위 결과를 참조하세요. 자신의 머신에서 자세한 결과를 보려면 테스트를 실행하세요: python tests/test_pypacker.py PerfTestCase

Q: 어떤 프로토콜이 지원되나요?

A: 현재 최소 지원 프로토콜은 다음과 같습니다: Ethernet, Radiotap, IEEE80211, ARP, DNS, STP, PPP, OSPF, VRRP, DTP, IP, ICMP, PIM, IGMP, IPX, TCP, UDP, SCTP, HTTP, NTP, RTP, DHCP, RIP, SIP, Telnet, HSRP, Diameter, SSL, TPKT, Pmap, Radius, BGP

Q: [xyz]를 지원할 계획이 있나요?

A: 새 기능은 제가 필요하거나 사람들이 기여함으로써 Pypacker에 추가됩니다. 특정 기능을 향후 릴리스에서 지원할 공식적인 계획은 없습니다. 기여에 대한 일반적인 지침은 HACKING 파일에서 확인할 수 있습니다.

Q: 이 프로젝트에 어떻게 기여할 수 있나요?

A: 버그/기능 요청은 Gitlab 버그 트래커를 사용하세요. 새로 등록하기 전에 이미 알려진 버그가 있는지 버그 트래커를 읽어 보세요. 패치는 풀 리퀘스트를 통해 보낼 수 있습니다.

Q: Windows 3.11/XP/7/8/mobile 등에서 Pypacker에 xyz 문제가 있습니다. 고칠 수 있나요?

A: 기본 기능은 모든 OS에서 작동해야 합니다. 선택적 기능은 문제를 일으킬 수 있습니다 (예: 인터셉터).

Q: Pypacker는 어떤 라이선스로 배포되나요?

A: GPLv2 라이선스입니다 (자세한 내용은 LICENSE 파일 참조).

Q: copy.deepcopy(some_packet) 호출 시 "TypeError: can't pickle Struct objects" 예외가 발생합니다.

A: Struct 객체를 pickle할 수 있도록 다음 해결 방법을 시도해 보세요:

root@kitploit:~
import struct, copyreg
def pickle_struct(s):
	return struct.Struct, (s.format,)

copyreg.pickle(struct.Struct, pickle_struct)

사용 팁

성능 관련

최대 성능을 얻으려면 다음 인덱스 표기법을 사용해 가장 낮은 레벨에서 속성에 접근하세요. 이렇게 하면 필요할 때만 레이어를 지연 파싱합니다:

root@kitploit:~
pkt_eth, pkt_ip, pkt_tcp, pkt_http = pkt[
 	None,
	(None, lambda b: b.__class__ in [ip.IP, ip6.IP6]),
	(tcp.TCP, lambda c: c.dport==80),
	http.HTTP
]
...
  • "%s" 또는 "%r" 형식을 사용해 패킷을 변환하지 마세요. 그렇게 하면 백그라운드에서 파싱이 발생합니다:
root@kitploit:~
pkt = Ethernet() + IP() + TCP()
# This parses ALL layers
packet_print = "%s" % pkt
  • pkt[L]을 사용한 단일 값 인덱스 표기법으로 레이어를 검색하지 마세요. L을 찾거나 최상위 레이어에 도달할 때까지 모든 레이어를 파싱하기 때문입니다:
root@kitploit:~
packet_found = pkt[Telnet]
# Alternative: Use multi-value index-notation. This will stop parsing at any non-matching layer:
packet_found = pkt[Ethernet,IP,TCP,Telnet]
  • pypy를 사용하세요 (전체 패킷 파싱에 대해 CPython보다 약 3배 빠름)

  • 더 높은 성능을 위해 자동 필드를 비활성화하세요 (bin(...) 호출에 영향):

root@kitploit:~
pkt = ip.IP(src_s="1.2.3.4", dst_s="1.2.3.5") + tcp.TCP()
# Disable checksum calculation (and any other update) for IP and TCP (only THIS packet instance)
pkt.sum_au_active = False
pkt.tcp.sum_au_active = False
bts = pkt.bin(update_auto_fields=False)
  • 최대 성능을 얻으려면 수신/송신 버퍼를 늘리세요. 이는 다음 명령으로 수행할 수 있습니다 (출처: http://www.cyberciti.biz/faq/linux-tcp-tuning/):
root@kitploit:~
sysctl -w net.core.rmem_max=12582912
sysctl -w net.core.rmem_default=12582912
sysctl -w net.core.wmem_max=12582912
sysctl -w net.core.wmem_default=12582912
sysctl -w net.core.optmem_max=2048000
sysctl -w net.core.netdev_max_backlog=5000
sysctl -w net.unix.max_dgram_qlen=1000
sysctl -w net.ipv4.tcp_rmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_wmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_mem="21228 87380 12582912"
sysctl -w net.ipv4.udp_mem="21228 87380 12582912"
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.ipv4.tcp_sack=1

기타 관련

  • TCP/UDP 스트림의 조립은 tshark에서 파이프와 함께 "-i -" 및 "-z follow,prot,mode,filter[,range]"를 사용해 수행할 수 있습니다.
  • 캡처 파일을 읽을 때 올바른 "최하위 레이어"를 선택하세요: 예를 들어 Wireshark로 파일을 열고 데이터 링크 레이어의 패킷 세부 정보를 확인하세요. 대부분의 경우 이는 layer12.ethernet.Ethernet으로 파싱할 수 있는 Ethernet II일 것입니다. 예를 들어 Wireshark/tshark의 "-i any" 옵션으로 캡처하면 layer12.linuxcc.LinuxCC로 표현되는 Linux cooked capture가 생성됩니다.
도구 다운로드