クリスマスなのでポートスキャナを実装しようかと思ったら昔の俺が既に実装していた
クリスマスなのでポートスキャナを実装しましょう.
タイトル通りです.
クリスマスなのでポートスキャナを実装しようかと思ったら昔の俺が既に実装していました.投機的実装.
なぜクリスマスにポートスキャナを?
ポートスキャンの方法はいくつかあり,その中にXmas scan
と呼ばれるものがあるので.
nmap
はクリスマスに実行すると
Nmap wishes you a merry Christmas! Specify -sX for Xmas Scan (https://nmap.org/book/man-port-scanning-techniques.html).
って言われる.
ポートスキャンの方法
リポジトリにおいてあったメモをコピペする
How to port scan.
Client is scanner. Server is target.
SYN scan
ポートが空いている場合は
- Client: send
SYN
packet - Server: send
SYN|ACK
packet - Client: send
ACK
packet (実際のポートスキャンではここまで行う必要はない)
3way handshakeによりコネクションを確立する(できる)
空いていない場合
- Client: send
SYN
packet - Server: send
RST|ACK
packet
サーバにより、RSTパケットが送り返されて終了する。
これでポートの状態がわかる。
FIN scan
- Client: send
FIN
packet - Server: send
RST
packet
コネクション張ってないのにFINパケットだけ送る。
意味わからんけど、これに大してRFC793に厳密に準拠した実装を行っているTCPサーバは
ポートが閉じている場合、RSTパケットを返信する。
NULL scan
TCPのコントロールフラグを何も立てずに送信する。FINスキャンと同じ挙動。
X-mas scan
- Client: send
FIN|URG|PSH
packet - Server: send
RST
packet
FIN|URG|PSH
のフラグ立ったパケットを送信する。FINスキャンと同じ挙動。
実装
かなり昔に書いただけあって汚く,色々と修正したいが後回しにする.
なんでこの名前にしたかは思い出せないが,多分RIOTのthundersteelだと思う.
単一ファイルで200行ないくらい.もっと綺麗に書けばもっと小さくなるとおもうので皆さんやってみてください.
おわりに
この記事は23卒のエンジニア職志望向けAdvent Calendar Advent Calendar 2021の25日目の記事です
Comments