

高速かつ軽量、UDPXはGoで書かれたシングルパケットUDPスキャナで、45以上のサービスの発見をサポートし、カスタムサービスの追加も可能です。使いやすくポータブルで、Linux、Mac OS、Windowsで実行できます。zgrab2やzmapのようなインターネット全体をスキャンするツールとは異なり、UDPXは移植性と使いやすさを重視して設計されています。
UDPポートのスキャンはTCPのスキャンとは大きく異なります。UDPはコネクションレス型プロトコルであるため、UDPポートをプローブしても結果が返ってくる場合と返ってこない場合があります。UDPXはシングルパケットベースのアプローチを採用しています。定義されたサービス(ポート)に対してプロトコル固有のパケットを送信し、応答を待ちます。タイムアウトはデフォルトで500msに設定されており、-wフラグで変更できます。この時間内にサービスからパケットが返ってきた場合、そのポートが確かにリッスンしており、開いていると報告されます。
一般的な手法は、ターゲットマシンの各ポートに0バイトのUDPパケットを送信することです。"ICMP Port Unreachable"メッセージを受信した場合、そのポートは閉じています。プローブに対してUDP応答を受信した場合(まれ)、ポートは開いています。まったく応答がない場合、状態はopenまたはfilteredであり、ポートが開いているか、パケットフィルターが通信をブロックしていることを意味します。この方法は追加の価値がないため実装されていません(UDPXは特定のプロトコルのみをテストします)。

⚠️ 同時接続数: デフォルトでは同時接続数は32に設定されています(何もクラッシュさせないため)。スキャンするホストが多い場合は、128または256接続に設定できます。ハードウェア、接続の安定性、ulimit(*nixの場合)に応じて、512以上の同時接続を実行することも可能ですが、推奨されません。
単一IPをスキャンする場合:
udpx -t 1.1.1.1
CIDRをスキャンする場合(最大128接続、タイムアウト1000ms):
udpx -t 1.2.3.4/24 -c 128 -w 1000
ファイルからターゲットをスキャンする場合(最大128接続、特定のサービスのみ):
udpx -tf targets.txt -c 128 -s ipmi
ターゲットには以下が指定可能:
IPv6にも対応しています。
結果を保存したい場合は、-o [ファイル名]フラグを使用します。出力は以下のようなJSONL形式です:
{"address":"45.33.32.156","hostname":"scanme.nmap.org","port":123,"service":"ntp","response_data":"JAME6QAAAEoAAA56LU9vp+d2ZPwOYIyDxU8jS3GxUvM="}
__ ______ ____ _ __
/ / / / __ \/ __ \ |/ /
/ / / / / / / /_/ / /
/ /_/ / /_/ / ____/ |
\____/_____/_/ /_/|_|
v1.0.2-beta, by @nullt3r
Usage of ./udpx-linux-amd64:
-c int
Maximum number of concurrent connections (default 32)
-nr
Do not randomize addresses
-o string
Output file to write results
-s string
Scan only for a specific service, one of: ard, bacnet, bacnet_rpm, chargen, citrix, coap, db, db, digi1, digi2, digi3, dns, ipmi, ldap, mdns, memcache, mssql, nat_port_mapping, natpmp, netbios, netis, ntp, ntp_monlist, openvpn, pca_nq, pca_st, pcanywhere, portmap, qotd, rdp, ripv, sentinel, sip, snmp1, snmp2, snmp3, ssdp, tftp, ubiquiti, ubiquiti_discovery_v1, ubiquiti_discovery_v2, upnp, valve, wdbrpc, wsd, wsd_malformed, xdmcp, kerberos, ike
-sp
Show received packets (only first 32 bytes)
-t string
IP/CIDR to scan
-tf string
File containing IPs/CIDRs to scan
-w int
Maximum time to wait for a response (socket timeout) in ms (default 500)
リリースセクションでプリビルドバイナリを入手できます。ソースからUDPXをビルドしたい場合は、以下の手順に従ってください。
Gitから:
git clone https://github.com/nullt3r/udpx
cd udpx
go build ./cmd/udpx
バイナリはカレントディレクトリに生成されます。
またはgoを使用:
go install -v github.com/nullt3r/udpx/cmd/udpx@latest
その後、バイナリは$HOME/go/bin/udpxにあります。必要に応じて、/usr/local/bin/に移動して直接呼び出せるようにしてください。
UDPXは45以上のサービスをサポートしています。特に注目すべきものは以下の通りです:
サポートされているサービスの完全なリスト:
プロトコル名とポートを指定して機能リクエストを送信してください。こちらで対応します。または、自分で追加することもできます。ファイルpkg/probes/probes.goには利用可能なすべてのペイロードが含まれています。プロトコル名、ポート、パケットデータ(16進数エンコード)を指定してください。
{
Name: "ike",
Payloads: []string{"5b5e64c03e99b51100000000000000000110020000000000000001500000013400000001000000010000012801010008030000240101"},
Port: []int{500, 4500},
},
私はいかなる損害についても責任を負いません。あなた自身の行動に責任を持ってください。事前の相互同意なしにターゲットをスキャンまたは攻撃することは違法となる場合があります。
UDPXはMITライセンスのもとで配布されています。