Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/v-byte-cpu/sx
偵察ネットワークマッピングポートスキャン情報収集ペネトレーションテスト
GitHubv-byte-cpu/sx

sx

🖖 高速、モダン、使いやすいネットワークスキャナー

リポジトリを見る
1.6k1087日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
sx — :vulcan_salute: 高速、モダン、使いやすいネットワークスキャナー | 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/ポートペアのリストをスキャンして、稼働中の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などの上位プロトコルのスキャンは、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オプションを使用して、スキャンするポートまたはポート範囲を1行に1つずつ指定したファイルを指定します。

ファイルからIP/ポートペアをJSON出力でスキャン:

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

入力ファイルの各行はJSON文字列で、ipフィールドとportフィールドを含む必要があります。

入力ファイルの例:

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

ARPキャッシュファイルは-aまたは--arp-cacheオプションで指定することも可能です:

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

または標準入力リダイレクト:

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など)でのスキャンをサポートしており、この場合、これらのインターフェースはイーサネットフレームではなく生のIPパケットを入力として必要とするため、ARPキャッシュを使用する必要はありません。例えば、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.

ここで重要なのは: セグメントをドロップして返す です。したがって、ほとんどのオペレーティングシステムの開いているポートは、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オプションで行えます。CIDR表記のIPまたはサブネットを除外するファイルを指定します。1行に1つずつです。

例えば、RFC 1918アドレスを除外するには、次の内容のips.txtファイルを作成します:

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

コメントや空行も挿入できます:

root@kitploit:~
# exclude RFC 1918 addresses
10.0.0.0/8 # comment 1
172.16.0.0/12 # comment 2
192.168.0.0/16 # comment 3

0.0.0.0/8 # used in initialization procedures (RFC 6890)

# exclude RFC 5735 addresses
127.0.0.0/8 # loopback address
192.0.0.0/24 # reserved block for IETF protocol assignments
224.0.0.0/4 # allocated for use in IPv4 multicast address assignments
240.0.0.0/4 # reserved for future use

# exclude Amazon network
3.0.0.0/8

# ip addresses are valid as well
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/ポートペアを含むJSONLファイルを指定する必要があります。

例えば、IP範囲スキャン:

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

ファイルからIP/ポートペアをJSON出力でスキャン:

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

入力ファイルの各行はJSON文字列で、ipフィールドとportフィールドを含む必要があります。

入力ファイルの例:

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
  • 伝送制御プロトコル ( rfc793 )
  • ユーザデータグラムプロトコル ( rfc768 )
  • インターネットホストの要件 - 通信層 ( rfc1122 )
  • SOCKSプロトコルバージョン5 ( rfc1928 )
  • インターネット制御メッセージプロトコル ( rfc792 )

🤝 貢献

貢献、問題報告、機能リクエストを歓迎します。

💎 クレジット

ロゴはmikhailtsoy.comによってデザインされました。

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。完全なライセンステキストはLICENSEファイルを参照してください。

ツールをダウンロード