0
0

More than 1 year has passed since last update.

【PowerShell】簡易ポートスキャナを作ってみた

Last updated at Posted at 2022-07-15

はじめに

業務で久々にPowerShellに触れることになったので、何か簡単なものを作ってみようと考えて、簡易的なポートスキャン用ツール(ポートスキャナ)を作ってみました。
※あくまでも学習用なので、「nmapを使わないのか?」というツッコミは無しで...

ベースとなるコマンドは、こちらの記事に掲載されているものですが、これに少し味付けをしてWell-knownポートを一通り調査できるスクリプトにしてみました。

コード

  • 以下のコードでは1~1023番までのWell-knownポートを順番に調べていますが、Test-NetConnectionは1つのポート番号あたり2秒程度かかるので、1023番ポートの処理が終わるまでにかなりの時間がかかります。
    • 調べたいポートが決まっているのであれば、そのポート番号だけを抜き出して配列にしておく方が良いかもしれません。
  • 実行結果は、通信可能なポートがTrueで、通信不可能なポートがFalseと表示されます。
  • Test-NetConnectionを実行する度に警告が表示されるため、こちらのページを参考にして警告表示を一時的に停止させました。
  • 一度定数を指定すると、スクリプトを繰り返し実行した時に「定数の上書きによるエラー」が発生してしまうため、こちらのページの方法で「定数が設定されていない事を確認した上で定数を設定する」という処理にしました。
portscan.ps1
# 「警告: TCP connect to (192.168.10.240 : 23) failed」などの警告を非表示にする。
$WarningPreference  = "silentlycontinue"

# 調査対象のIPアドレスを定数にセット
if ([System.String]::IsNullOrEmpty($IP_ADDR) -eq $TRUE) {
    Set-Variable -name IP_ADDR -value "192.168.10.240" -option Constant
}

# well-knownポートのスキャン
# ※Test-NetConnectionコマンドでは0番ポートはエラーとなるため、1番ポートからスキャンしている。
for ($i=1; $i -lt 1023; $i++){
    # -InformationLevel Quietオプションを指定して、通信結果をTrue/Falseで取得する。
    $result = Test-NetConnection -ComputerName $IP_ADDR -Port $i -InformationLevel Quiet
    Write-Host "$($i)番ポート:$($result)"
}

# 警告設定を元に戻す。
$WarningPreference  = "continue"
実行結果
1番ポート:False
2番ポート:False
3番ポート:False
...
21番ポート:False
22番ポート:True
23番ポート:False
...
79番ポート:False
80番ポート:True
81番ポート:False
...

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0