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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/rafael-santiago/pig
IDS/IPS EvasionNetwork SecurityPenetration Testing
GitHubrafael-santiago/pig

pig

Linux 패킷 조작 도구.

저장소 보기
479415년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Pig

Pig (Packet intruder generator로 이해될 수 있습니다)는 Linux 패킷 제작 도구입니다. Pig를 사용하여 IDS/IPS 등 다른 것들을 테스트할 수 있습니다.

Pig는 즉시 사용 가능한 잘 알려진 공격 시그니처 모음을 제공하며, 필요에 따라 이 컬렉션을 더 구체적인 항목으로 확장할 수 있습니다.

현재까지는 TCP, UDP, ICMP 기반의 전송 계층을 가진 IPv4 시그니처를 만들 수 있습니다. 또한 ARP 프로토콜 기반의 시그니처를 만들 수 있으며, Ethernet 프레임부터 패킷을 구성할 수도 있습니다.

여기에 2600 잡지의 SPRING 2016 호에 실린 제 기사로 오셨다면, 이 작은 Pig가 그 이후로 계속 진화해 왔으므로 다음 문서 섹션을 계속 읽어보시기 바랍니다.

이 저장소를 클론하는 방법은?

매우 간단합니다:

root@kitploit:~
[email protected]:~/src# git clone https://github.com/rafael-santiago/pig pig
[email protected]:~/src# cd pig
[email protected]:~/src/pig# git submodule update --init

빌드하는 방법은?

pig를 빌드하려면 Hefesto를 사용해야 합니다. Hefesto를 시스템에서 작동시키는 단계를 따르십시오. 그런 다음 pig의 하위 디렉토리 src로 이동하여 다음 명령을 실행하십시오:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto

이 명령 후에 src/bin 경로에서 pig 바이너리를 찾을 수 있습니다. src/bin에서 상대 경로로 바이너리를 사용하거나 설치할 수 있습니다.

어떤 이유로 빌드 문제가 발생한다면 BUILD.md에 있는 몇 가지 설명을 읽어보시기 바랍니다.

설치하는 방법은?

설치하려면 src 하위 디렉토리 안에 있어야 하며 다음을 호출하십시오:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --install

제거하려면 src 하위 디렉토리 안에서 다음을 호출하십시오:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --uninstall

pigsty 파일

Pigsty 파일은 패킷 시그니처 집합을 정의할 수 있는 일반 텍스트 파일입니다. 따라야 할 특정 구문이 있습니다. pigsty 파일의 예를 살펴보십시오:

root@kitploit:~
[ signature   =      "Hello",
  ip.version  =            4,
  ip.ihl      =            5,
  ip.tos      =            0,
  ip.src      = 192.30.70.10,
  ip.dst      =  192.30.70.3,
  ip.protocol =           17,
  udp.dst     =         1008,
  udp.src     =        32000,
  udp.payload =    "Hello!!" ]

기본적으로 모든 시그니처 데이터는 대괄호 [ ... ] 사이에 있어야 합니다.

이 영역 안에서는 field = data 형식으로 정보가 제공됩니다.

컴퓨터 네트워크에 대한 경험이 있다면 표 1에 나열된 대부분의 필드가 여러분에게 의미가 있을 것입니다. 이러한 필드를 사용하여 추가 시그니처를 만드십시오.

표 1: pig 시그니처 필드.

시그니처를 생성할 때 모든 데이터를 지정할 필요는 없습니다. 가장 관련성 높은 패킷 부분만 지정하면 나머지 부분은 기본값으로 채워집니다. 체크섬은 항상 다시 계산됩니다.

팁: pigsty 하위 디렉토리를 살펴보십시오. 많은 시그니처 파일을 찾을 수 있으며 새 파일을 정의하는 것이 매우 간단하다는 것을 알게 될 것입니다.

IP 주소를 지리적으로 지정하기

네, 가능합니다. 이 기능을 사용하려면 표 2에 나열된 값을 ip 주소 유형 필드에 지정하기만 하면 됩니다.

표 2: 지리적 영역별 IP.

사용할 값의미

나만의 주소 지정하기

IP 주소 유형 필드에서 값으로 user-defined-ip를 사용해야 합니다. 이 경우 명령줄 옵션 --targets를 사용해야 합니다. 자세한 내용은 pig 사용 섹션을 참조하십시오.

더 많은 패킷 시그니처를 보내 기여하기

자신의 환경 외에도 관련성이 있다고 판단되는 pigsty 파일을 만든 경우, 이러한 유용한 파일을 포함시키기 위해 풀 리퀘스트를 열어주십시오. 미리 감사드립니다!

pig 사용하기

Pig 사용법은 매우 직관적이며 다음 네 가지 기본 옵션을 제공해야 합니다:

  • --signatures
  • --gateway
  • --net-mask
  • --lo-iface

각 옵션에 대해 더 알고 싶으신가요?... 그럼 시작해 보겠습니다:

  • --signatures 옵션은 pigsty 파일의 파일 경로 목록을 받습니다.
  • --gateway 옵션은 게이트웨이 주소를 지정하는 곳입니다. pig가 이더넷 프레임도 생성(또는 생성하려고 시도)한다는 점에 유의하십시오. 따라서 게이트웨이 주소는 계층 1 데이터를 올바르게 구성하는 데 매우 중요합니다.
  • --net-mask 옵션은 라우팅 문제를 위해 네트워크 마스크를 받습니다.
  • --lo-iface 옵션은 생성된 패킷을 "내보낼" 로컬 네트워크 인터페이스의 이름을 지정하는 곳입니다.
  • --no-gateway 옵션은 어떤 패킷도 네트워크 외부로 보내지 않음을 나타냅니다.

DDos 기반 트래픽을 생성한다고 가정해 보겠습니다:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0 --lo-iface=eth0

이제 모든 것을 엉망으로 만들고 싶다면:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty,pigsty/attackresponses.pigsty,\
> pigsty/badtraffic.pigsty,pigsty/backdoors.pigsty\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

추가 옵션

시그니처 전송 간 타임아웃 정의

이를 위해 --timeout=<밀리초> 옵션을 사용하십시오.

에코 억제

--no-echo 옵션을 사용하십시오.

대상 정의

--targets 옵션을 사용하십시오. 정확한 IP, IP 마스크 및 CIDR을 기반으로 목록을 지정할 수 있습니다.

다음 예를 참조하십시오:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local-mess.pigsty\
> --targets=192.30.70.3,192.30.70.*,192.30.70.0/9\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0\
> --lo-iface=eth0

게이트웨이 사용 안 함

로드된 시그니처가 현재 네트워크 외부로 데이터를 보내지 않을 때 유용합니다. 이를 플래그로 지정하려면 --no-gateway 옵션을 사용해야 합니다. --no-gateway 옵션을 사용하면 게이트웨이 주소를 지정할 필요가 없습니다. 패킷이 현재 세그먼트 외부로 흐르지 않기 때문입니다. 결과적으로 네트워크 마스크를 알리는 것도 무의미해집니다.

예를 들어:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local_traffic.pigsty --no-gateway --lo-iface=eth2

위의 예에서 이더넷 프레임은 더 이상 pig의 책임이 아닙니다. 따라서 pig는 --gateway 및 --net-mask 옵션이 없다고 불평하지 않습니다.

--no-gateway 옵션은 ARP 트래픽을 생성해야 하는 경우에 매우 유용합니다. pig를 사용한 ARP 스푸핑 수행에 대한 다른 문서를 참조하십시오.

하나의 시그니처만 전송하고 돌아오기

하나의 시그니처만 전송한 후 호출자에게 돌아와서 어떤 일이 발생했는지 확인해야 할 수도 있습니다. 이러한 요구 사항은 이 애플리케이션을 시스템 테스트 또는 단위 테스트 지원 도구로 사용할 때 일반적입니다. 따라서 이 작업을 수행해야 하는 경우 --single-test 옵션을 사용해 보십시오:

root@kitploit:~
[email protected]:~# pig --signature=pigsty/syn-scan.pigsty --targets=127.0.0.1 --single-test\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

이 명령을 실행한 후 pig는 syn-scan.pigsty 파일에서 하나의 시그니처만 선택하여 전송을 시도한 후 종료됩니다. 프로세스 중에 오류가 발생하면 pig는 종료 코드 1로 종료되고, 그렇지 않으면 pig는 종료 코드 0으로 종료됩니다.

pigsty 순회 모드 지정

기본 pig의 작동 모드는 사전 정의된 타임아웃을 존중하며 네트워크에 수많은 패킷을 쏟아내는 무한 루프입니다.

전송을 위해 로드된 패킷을 pig가 순회하는 방식을 옵션 --loop=<모드>를 사용하여 정의할 수 있습니다. 현재까지 모드는 두 가지입니다: random(기본값)과 sequential.

sequential 모드는 로드된 패킷 시그니처 목록의 끝에 도달하면 시그니처를 다시 반복합니다.

하위 작업

하위 작업은 패킷 제작과 관련된 유용한 작은 작업으로, 제작 세션을 도와주기 위해 pig에 포함되어 있습니다. 이러한 작업은 --sub-task=<작업 이름> 옵션을 사용하여 액세스할 수 있습니다.

실질적으로 하위 프로그램이기 때문에 하위 작업마다 고유한 특성이 있으며, 이에 대한 세부 사항은 각각의 매뉴얼에 나와 있습니다. 이에 대한 내용은 표 3을 참조하십시오.

표 3: pig 하위 작업.

Pig 팁

이더넷 프레임에서 최상위 계층까지...

현재까지는 전송 계층에 UDP 또는 TCP가 있는 IPv4 기반 패킷을 구성할 수 있습니다. 또한 ARP 패킷을 구성할 수 있습니다.

그러나 Ethernet 프레임부터 시작하여 패킷을 구성할 수도 있습니다. 좋은 점은 Ethernet 페이로드 위에 사실상 모든 것을 구성할 수 있다는 것입니다.

예를 들어, pig가 현재 cooked IPv6 구성을 지원하지 않지만, 원시 Ethernet 기반 pigsty를 사용하여 구성할 수 있습니다. 다음 예를 참조하십시오:

root@kitploit:~
[ eth.hwdst = "5C:AC:4C:AA:F5:B5",
  eth.hwsrc = "08:95:2A:AD:D6:4F",
  eth.type = 0x86DD,
  eth.payload = "\x60\x00\x00\x00\x00\x20\x3a\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\xfe\x80\x00\x00\x00\x00\x00\x00\x55\x51\x00\xc2\x18\x0f\xdb\x46\x88\x00\x32\x01\xe0\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\x02\x01\x08\x95\x2a\xad\xd6\x4f",
  signature = "IPv6 from Sparta" ]

"Ethernet pigsty" 내에 대상 및 소스 MAC 주소를 포함하는 것은 선택 사항이므로, "plush field"를 사용하지 않고도 작업을 완료할 수 있습니다.

이는 환경에서 새로운 프로토콜을 테스트하거나 기타 변칙적인 재미있는 작업을 수행해야 할 때 유용합니다. 이러한 원시 방식으로 pig는 계속 유용하게 사용할 수 있습니다.

Pig 처음부터 테스트하기

다음 데이터를 "oink.pigsty"로 저장하십시오:

root@kitploit:~
[ signature   =           "oink",
  ip.version  =                4,
  ip.ihl      =                5,
  ip.tos      =                0,
  ip.src      =        127.0.0.1,
  ip.dst      =  user-defined-ip,
  ip.protocol =               17,
  udp.dst     =             1008,
  udp.src     =            32000,
  udp.payload =        "Oink!!\n" ]

다른 tty에서 UDP 모드로 netcat을 실행하여 포트 1008에서 연결을 수신 대기합니다:

root@kitploit:~
[email protected]:~# nc -u -l -p 1008

이제 "oink.pigsty"를 사용하여 pig를 실행하고, 대상으로 loopback을 지정합니다:

root@kitploit:~
[email protected]:~# pig --signatures=oink.pigsty --targets=127.0.0.1\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

netcat은 여러 번의 oink를 수신하기 시작할 것입니다. 축하합니다!! pig가 시스템에서 실행 중입니다! ;)

네트워크를 스니핑하여 인터페이스 주변에서 흐르는 이러한 UDP 패킷에 대한 더 많은 정보를 얻어 보십시오...

즐거운 시간 되세요!

도구 다운로드
필드의미프로토콜데이터 타입샘플 정의
signature시그니처 이름-문자열signature = "Udp flood"
eth.hwdst이더넷 대상 MACEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrc이더넷 소스 MACEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.type이더타입Ethernet숫자eth.type = 0x0800
eth.payload이더넷 페이로드Ethernet문자열eth.payload = "f\x00ob\x04r"
ip.versionIP 버전IP숫자ip.version = 4
ip.ihl인터넷 헤더 길이IP숫자ip.ihl = 5
ip.tos서비스 유형IP숫자ip.tos = 0
ip.tlen전체 길이IP숫자ip.tlen = 20
ip.id패킷 IDIP숫자ip.id = 0xbeef
ip.flagsIP 플래그IP숫자ip.flags = 4
ip.offset프래그먼트 오프셋IP숫자ip.offset = 0
ip.ttlTTLIP숫자ip.ttl = 64
ip.protocol프로토콜IP숫자ip.protocol = 6
ip.checksum체크섬IP숫자ip.checksum = 0
ip.src소스 주소IPIP 주소ip.src = 192.30.70.3
ip.dst대상 주소IPIP 주소ip.dst = 192.30.70.3
ip.payloadIP 원시 페이로드IP문자열ip.payload = "\x01\x02"
tcp.src소스 포트TCP숫자tcp.src = 80
tcp.dst대상 포트TCP숫자tcp.dst = 21
tcp.seqno시퀀스 번호TCP숫자tcp.seqno = 10202
tcp.ackno확인 응답 번호TCP숫자tcp.ackno = 10200
tcp.sizeTCP 길이TCP숫자tcp.size = 4
tcp.reservTCP 예약 필드TCP숫자tcp.reserv = 0
tcp.urgTCP urg 플래그TCP비트tcp.urg = 0
tcp.ackTCP ack 플래그TCP비트tcp.ack = 1
tcp.pshTCP psh 플래그TCP비트tcp.psh = 0
tcp.rstTCP rst 플래그TCP비트tcp.rst = 0
tcp.synTCP syn 플래그TCP비트tcp.syn = 0
tcp.finTCP fin 플래그TCP비트tcp.fin = 0
tcp.wsizeTCP 윈도우 크기TCP숫자tcp.wsize = 0
tcp.checksum체크섬TCP숫자tcp.checksum = 0
tcp.urgp긴급 포인터TCP숫자tcp.urgp = 0
tcp.payload페이로드TCP문자열tcp.payload = "\x01abc"
udp.src소스 포트UDP숫자udp.src = 53
udp.dst대상 포트UDP숫자udp.dst = 7
udp.sizeUDP 길이UDP숫자udp.size = 8
udp.checksum체크섬UDP숫자udp.checksum = 0
udp.payload페이로드UDP숫자udp.payload = "boo!"
icmp.typeICMP 유형ICMP숫자icmp.type = 0
icmp.codeICMP 코드ICMP숫자icmp.code = 0
icmp.checksum체크섬ICMP숫자icmp.checksum = 0
icmp.payload페이로드ICMP문자열icmp.payload = "ping!"
arp.hwtypeARP 하드웨어 유형ARP숫자arp.hwtype = 0x1
arp.ptypeARP 프로토콜 유형ARP숫자arp.ptype = 0x0800
arp.hwlenARP 하드웨어 길이ARP숫자arp.hwlen = 6
arp.opcodeARP 연산 코드ARP숫자arp.opcode = 2
arp.hwsrcARP 소스 하드웨어 주소ARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcARP 소스 프로토콜 주소ARPIP 주소arp.psrc = 192.30.70.3
arp.hwdstARP 대상 하드웨어 주소ARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstARP 대상 프로토콜 주소ARPIP 주소arp.pdst = 192.30.70.3
north-american-ip북미의 IP 주소
south-american-ip남미의 IP 주소
asian-ip아시아의 IP 주소
european-ip유럽의 IP 주소
하위 작업수행 기능매뉴얼
pcap-importPCAP 파일에서 pigsty 파일로 패킷 가져오기cat doc/pcap-import.md
shell대화형 모드에서 pig 실행cat doc/shell.md