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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sx — :vulcan_salute: 빠르고 현대적이며 사용하기 쉬운 네트워크 스캐너 | Kitploit
도구/GitHubGitHub/v-byte-cpu/sx
ReconnaissanceNetwork MappingPort ScanningInformation GatheringPenetration Testing
GitHubv-byte-cpu/sx

sx

🖖 빠르고 현대적이며 사용하기 쉬운 네트워크 스캐너

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

sx

License Build Status GoReportCard Status Platform

sx는 UNIX 철학을 따르도록 설계된 커맨드라인 네트워크 스캐너입니다.

이 프로젝트의 목표는 깨끗하고 간단한 코드로 가장 빠른 네트워크 스캐너를 만드는 것입니다.

📖 목차

  • 기능
  • 설치
  • 소스에서 빌드
  • 빠른 시작
  • 참고 자료
  • 기여하기
  • 크레딧
  • 라이선스

✨ 기능

  • ⚡ nmap보다 30배 빠름
  • ARP 스캔: 로컬 네트워크를 스캔하여 활성 장치 감지
  • ICMP 스캔: 고급 ICMP 스캐닝 기술을 사용하여 활성 호스트 및 방화벽 규칙 감지
  • TCP SYN 스캔: 전통적인 하프 오픈 스캔으로 열린 TCP 포트 찾기
  • TCP FIN / NULL / Xmas 스캔: 일부 방화벽 규칙을 우회하는 스캔 기술
  • 모든 TCP 플래그를 사용한 사용자 정의 TCP 스캔: 원하는 모든 이국적인 패킷을 보내고 응답 패킷에 설정된 모든 TCP 플래그와 함께 결과를 얻음
  • UDP 스캔: UDP 포트를 스캔하고 전체 ICMP 응답을 받아 열린 포트 또는 방화벽 규칙 감지
  • 애플리케이션 스캔:
    • SOCKS5 스크린: IP 범위 또는 파일에서 ip/port 쌍 목록을 스캔하여 활성 SOCKS5 프록시 감지
  • 유한 순환 곱셈 그룹을 사용한 IP 주소 무작위 반복
  • JSON 출력 지원: sx는 결과의 편리한 자동 처리를 위해 특별히 설계됨

📦 설치

가장 간단한 방법은 GitHub Releases에서 다운로드하여 실행 파일을 PATH에 배치하는 것입니다.

🛠 소스에서 빌드

요구 사항:

  • Go 1.25 이상
  • libpcap (wireshark를 사용하는 경우 이미 설치되어 있음)

macOS에서는 먼저 Xcode Command Line Tools를 설치하여 CGO가 시스템 libpcap과 링크할 수 있도록 합니다:

root@kitploit:~
xcode-select --install

소스 트리의 루트에서 다음을 실행합니다:

root@kitploit:~
go build

🚀 빠른 시작

sx로 네트워크를 스캔하는 방법을 보여주는 간단한 예제입니다.

ARP 스캔

로컬 네트워크를 스캔하고 연결된 장치의 IP 주소, MAC 주소 및 관련 하드웨어 공급업체를 표시합니다:

root@kitploit:~
sx arp 192.168.0.1/24

출력 예시:

root@kitploit:~
192.168.0.1          b0:be:76:40:05:8d    TP-LINK TECHNOLOGIES CO.,LTD.
192.168.0.111        80:c5:f2:0b:02:e3    AzureWave Technology Inc.
192.168.0.171        88:53:95:2d:3c:af    Apple, Inc.

JSON 출력:

root@kitploit:~
sx arp --json 192.168.0.1/24

출력 예시:

root@kitploit:~
{"ip":"192.168.0.1","mac":"b0:be:76:40:05:8d","vendor":"TP-LINK TECHNOLOGIES CO.,LTD."}
{"ip":"192.168.0.111","mac":"80:c5:f2:0b:02:e3","vendor":"AzureWave Technology Inc."}
{"ip":"192.168.0.171","mac":"88:53:95:2d:3c:af","vendor":"Apple, Inc."}

종료 전 5초 대기하여 지연된 응답 패킷을 수신합니다. 기본적으로 sx는 300밀리초를 기다립니다:

root@kitploit:~
sx arp --exit-delay 5s 192.168.0.1/24

10초마다 네트워크를 다시 스캔하는 라이브 스캔 모드:

root@kitploit:~
sx arp 192.168.0.1/24 --live 10s

TCP 스캔

nmap 및 다른 스캐너가 실제 스캔 전에 IP 주소를 MAC 주소로 변환하기 위해 ARP 요청을 암시적으로 수행하는 것과 달리, sx는 ARP 캐시 개념을 명시적으로 사용합니다. ARP 캐시 파일은 각 줄에 JSON 문자열이 포함된 간단한 텍스트 파일(JSONL 파일)로, 위에서 설명한 ARP 스캔 JSON 출력과 동일한 JSON 필드를 갖습니다. TCP 및 UDP와 같은 상위 수준 프로토콜의 스캔은 stdin에서 ARP 캐시 파일을 읽은 다음 실제 스캔을 시작합니다.

이것은 프로그램 설계를 단순화할 뿐만 아니라 매번 ARP 스캔을 수행할 필요가 없으므로 스캔 프로세스 속도를 높입니다.

ARP 캐시가 arp.cache 파일에 있다고 가정합니다. 수동으로 생성하거나 아래와 같이 ARP 스캔을 사용할 수 있습니다:

root@kitploit:~
sx arp 192.168.0.1/24 --json | tee arp.cache

ARP 캐시 파일이 준비되면 TCP SYN 스캔과 같은 상위 수준 프로토콜 스캔을 실행할 수 있습니다:

root@kitploit:~
cat arp.cache | sx tcp -p 1-65535 192.168.0.171

출력 예시:

root@kitploit:~
192.168.0.171        22
192.168.0.171        443

이 경우 포트 22와 443이 열려 있음을 알 수 있습니다.

대규모 스캔 중에 send: No buffer space available 메시지가 나타나면 일반적으로 송신자가 커널/raw 소켓 버퍼보다 빠르게 전송하고 있음을 의미합니다. 첫 번째 해결 방법은 --rate를 추가하고 전송 버스트를 낮추는 것입니다. 예: -r 100000/s 또는 필요에 따라 더 낮게 설정. 일부 시스템에서는 OS 소켓/버퍼 제한을 조정하는 것도 도움이 될 수 있지만, 속도 제한이 주요 해결책입니다.

JSON 출력으로 스캔:

root@kitploit:~
cat arp.cache | sx tcp --json -p 1-65535 192.168.0.171

출력 예시:

root@kitploit:~
{"scan":"tcpsyn","ip":"192.168.0.171","port":22}
{"scan":"tcpsyn","ip":"192.168.0.171","port":443}

여러 포트 범위 스캔:

root@kitploit:~
cat arp.cache | sx tcp -p 1-23,25-443 192.168.0.171

또는 개별 포트:

root@kitploit:~
cat arp.cache | sx tcp -p 22,443 192.168.0.171

또는 --ports-file 옵션을 사용하여 스캔할 포트 또는 포트 범위가 한 줄에 하나씩 포함된 파일을 지정합니다.

파일에서 ip/port 쌍을 JSON 출력으로 스캔:

root@kitploit:~
cat arp.cache | sx tcp --json -f ip_ports_file.jsonl

입력 파일의 각 줄은 ip 및 port 필드를 반드시 포함하는 JSON 문자열입니다.

입력 파일 예시:

root@kitploit:~
{"ip":"10.0.1.1","port":1080}
{"ip":"10.0.2.2","port":1081}

-a 또는 --arp-cache 옵션을 사용하여 ARP 캐시 파일을 지정할 수 있습니다:

root@kitploit:~
sx tcp -a arp.cache -p 22,443 192.168.0.171

또는 stdin 리디렉션:

root@kitploit:~
sx tcp -p 22,443 192.168.0.171 < arp.cache

tcp 대신 tcp syn 하위 명령어를 사용할 수도 있습니다:

root@kitploit:~
cat arp.cache | sx tcp syn -p 22 192.168.0.171

tcp 하위 명령어는 --flags 옵션이 전달되지 않는 한 tcp syn 하위 명령어의 약어입니다. 아래 참조.

VPN 인터페이스

sx는 가상 네트워크 인터페이스(wireguard, openvpn 등)로 스캔을 지원하며, 이 경우 ARP 캐시를 사용할 필요가 없습니다. 이러한 인터페이스는 이더넷 프레임 대신 원시 IP 패킷을 입력으로 필요로 하기 때문입니다. 예를 들어, VPN 네트워크의 IP 주소 스캔:

root@kitploit:~
sx tcp 10.1.27.1 -p 80 --json

TCP FIN 스캔

대부분의 네트워크 스캐너는 스캔 결과를 해석하려고 시도합니다. 예를 들어 "이 포트는 닫혀 있습니다" 대신 "RST를 수신했습니다"라고 말합니다. 때로는 맞고 때로는 틀립니다. 초보자에게는 쉽지만, 자신이 무엇을 하고 있는지 아는 경우 특히 고급 스캔 기술에 대해 프로그램의 해석에서 실제로 일어난 일을 추론하기 위해 계속 시도합니다.

sx는 이러한 문제를 극복하려고 합니다. TCP FIN, NULL, Xmas 및 사용자 정의 TCP 스캔에 대한 모든 응답 패킷 정보를 반환합니다. 정보에는 IP 주소, TCP 포트 및 응답 패킷에 설정된 모든 TCP 플래그가 포함됩니다.

TCP FIN 스캔과 그 변형(NULL 및 Xmas)은 RFC793 섹션 3.9를 이용합니다:

SEGMENT ARRIVES

If the state is CLOSED (i.e., TCB does not exist) then

root@kitploit:~
 all data in the incoming segment is discarded.  An incoming
 segment containing a RST is discarded.  An incoming segment not
 containing a RST causes a RST to be sent in response.  The
 acknowledgment and sequence field values are selected to make the
 reset sequence acceptable to the TCP that sent the offending
 segment.

따라서 닫힌 포트는 RST 플래그가 있는 패킷을 반환해야 합니다.

이 섹션은 또한 다음과 같이 명시합니다:

If the state is LISTEN then

...

Any other control or text-bearing segment (not containing SYN) must have an ACK and thus would be discarded by the ACK processing. An incoming RST segment could not be valid, since it could not have been sent in response to anything sent by this incarnation of the connection. So you are unlikely to get here, but if you do, drop the segment, and return.

주요 문구는 drop the segment입니다. 따라서 대부분의 운영 체제에서 열린 포트는 SYN, ACK 및 RST를 제외한 모든 플래그가 포함된 TCP 패킷을 드롭합니다.

TCP FIN 스캔으로 닫힌 포트를 스캔해 보겠습니다:

root@kitploit:~
cat arp.cache | sx tcp fin --json -p 23 192.168.0.171

출력 예시:

root@kitploit:~
{"scan":"tcpfin","ip":"192.168.0.171","port":23,"flags":"ar"}

flags 필드는 응답 패킷의 모든 TCP 플래그를 포함하며, 각 문자는 TCP 플래그 중 하나를 나타냅니다:

  • s - SYN 플래그
  • a - ACK 플래그
  • f - FIN 플래그
  • r - RST 플래그
  • p - PSH 플래그
  • u - URG 플래그
  • e - ECE 플래그
  • c - CWR 플래그
  • n - NS 플래그

이 경우 포트 23이 ACK 및 RST 플래그가 설정된 응답 패킷을 보냈음을 알 수 있습니다(rfc793에 따른 닫힌 포트의 일반적인 응답).

열린 포트를 스캔하면 (방화벽이 응답을 스푸핑하지 않는 한) 응답이 없습니다.

다른 유형의 TCP 스캔도 유사하게 수행할 수 있습니다.

TCP NULL 스캔:

root@kitploit:~
cat arp.cache | sx tcp null --json -p 23 192.168.0.171

TCP Xmas 스캔:

root@kitploit:~
cat arp.cache | sx tcp xmas --json -p 23 192.168.0.171

사용자 정의 TCP 스캔

--flags 옵션을 사용하여 사용자 정의 TCP 플래그가 있는 TCP 패킷을 보낼 수 있습니다.

원격 OS 지문을 얻기 위해 SYN, FIN 및 ACK 플래그가 설정된 TCP 패킷을 보내 봅시다:

root@kitploit:~
cat arp.cache | sx tcp --flags syn,fin,ack --json -p 23 192.168.0.171

Windows 및 MacOS는 이 패킷에 응답하지 않지만, Linux는 RST 플래그가 있는 응답 패킷을 보냅니다.

--flags 옵션에 가능한 인수:

  • syn - SYN 플래그
  • ack - ACK 플래그
  • fin - FIN 플래그
  • rst - RST 플래그
  • psh - PSH 플래그
  • urg - URG 플래그
  • ece - ECE 플래그
  • cwr - CWR 플래그
  • ns - NS 플래그

UDP 스캔

sx는 열린 UDP 포트를 조사하는 데 도움을 줄 수 있습니다. UDP 스캔은 RFC1122 섹션 4.1.3.1을 이용합니다:

If a datagram arrives addressed to a UDP port for which there is no pending LISTEN call, UDP SHOULD send an ICMP Port Unreachable message.

TCP 스캔과 유사하게 sx는 UDP 스캔에 대한 모든 응답 ICMP 패킷 정보를 반환합니다. 정보에는 IP 주소, ICMP 패킷 유형 및 응답 패킷에 설정된 코드가 포함됩니다.

예를 들어 호스트의 DNS 서버를 감지하려면 다음을 실행합니다:

root@kitploit:~
cat arp.cache | sx udp --json -p 53 192.168.0.171

출력 예시:

root@kitploit:~
{"scan":"udp","ip":"192.168.0.171","icmp":{"type":3,"code":3}}

이 경우 호스트가 Destination Unreachable 유형과 Port Unreachable 코드가 있는 ICMP 응답 패킷을 보냈음을 알 수 있습니다(rfc1122에 따른 닫힌 포트의 일반적인 응답).

방화벽은 일반적으로 Port Unreachable과 다른 ICMP 코드를 설정하므로 쉽게 감지할 수 있습니다.

속도 제한

때로는 생성된 패킷이 전송되는 속도를 제한해야 할 수 있습니다. 이는 --rate 옵션으로 수행할 수 있습니다.

예를 들어, 속도를 5초에 1개의 패킷으로 제한하려면:

root@kitploit:~
cat arp.cache | sx tcp --rate 1/5s --json -p 22,80,443 192.168.0.171

서브넷 제외

때로는 스캔에서 일부 IP 주소와 서브넷을 제외해야 할 수 있습니다. 이는 --exclude 옵션으로 수행할 수 있습니다. 제외할 IP 또는 CIDR 표기법의 서브넷을 한 줄에 하나씩 지정하는 파일을 지정합니다.

예를 들어, RFC 1918 주소를 제외하려면 ips.txt 파일을 다음 내용으로 생성합니다:

root@kitploit:~
10.0.0.0/8
172.16.0.0/16
192.168.0.0/16

주석과 빈 줄도 추가할 수 있습니다:

root@kitploit:~
# RFC 1918 주소 제외
10.0.0.0/8 # 주석 1
172.16.0.0/12 # 주석 2
192.168.0.0/16 # 주석 3

0.0.0.0/8 # 초기화 프로시저에서 사용 (RFC 6890)

# RFC 5735 주소 제외
127.0.0.0/8 # 루프백 주소
192.0.0.0/24 # IETF 프로토콜 할당을 위한 예약 블록
224.0.0.0/4 # IPv4 멀티캐스트 주소 할당에 사용
240.0.0.0/4 # 향후 사용을 위해 예약

# Amazon 네트워크 제외
3.0.0.0/8

# IP 주소도 유효
1.1.1.1

그리고 --exclude ips.txt 옵션으로 스캔을 실행합니다.

라이브 LAN TCP SYN 스캐너

스캔 조합의 예로, ARP와 TCP SYN 스캔을 결합하여 전체 LAN 네트워크를 주기적으로 스캔하는 라이브 TCP 포트 스캐너를 만들 수 있습니다.

라이브 ARP 스캔을 시작하고 결과를 arp.cache 파일에 저장:

root@kitploit:~
sx arp 192.168.0.1/24 --live 10s --json | tee arp.cache

다른 터미널에서 TCP SYN 스캔 시작:

root@kitploit:~
while true; do sx tcp -p 1-65535 -a arp.cache -f arp.cache; sleep 30; done

SOCKS5 스캔

sx는 활성 SOCKS5 프록시를 감지할 수 있습니다. 스캔하려면 IP 범위 또는 ip/port 쌍이 있는 JSONL 파일을 지정해야 합니다.

예: IP 범위 스캔:

root@kitploit:~
sx socks -p 1080 10.0.0.1/16

파일에서 ip/port 쌍을 JSON 출력으로 스캔:

root@kitploit:~
sx socks --json -f ip_ports_file.jsonl 

입력 파일의 각 줄은 ip 및 port 필드를 반드시 포함하는 JSON 문자열입니다.

입력 파일 예시:

root@kitploit:~
{"ip":"10.0.1.1","port":1080}
{"ip":"10.0.2.2","port":1081}

스캔할 포트 범위를 지정할 수도 있습니다:

root@kitploit:~
sx socks -p 1080-4567 -f ips_file.jsonl

이 경우 파일에서 IP 주소만 가져오며 port 필드는 더 이상 필요하지 않습니다.

사용법 도움말

root@kitploit:~
sx help

📜 참고 자료

  • Network Security Assessment: Know Your Network 1st Edition by Chris McNab
  • ICMP Usage in Scanning - The Complete Know-How by Ofir Arkin
  • Transmission Control Protocol ( rfc793 )
  • User Datagram Protocol ( rfc768 )
  • Requirements for Internet Hosts -- Communication Layers ( rfc1122 )
  • SOCKS Protocol Version 5 ( rfc1928 )
  • Internet Control Message Protocol ( rfc792 )

🤝 기여하기

기여, 이슈 및 기능 요청은 환영합니다.

💎 크레딧

로고는 mikhailtsoy.com에서 디자인했습니다.

License

이 프로젝트는 MIT License 하에 라이선스가 부여됩니다. 전체 라이선스 텍스트는 LICENSE 파일을 참조하십시오.

도구 다운로드