主頁 > 知識(shí)庫 > PowerShell腳本開發(fā)之對(duì)指定IP進(jìn)行端口掃描

PowerShell腳本開發(fā)之對(duì)指定IP進(jìn)行端口掃描

熱門標(biāo)簽:印臺(tái)區(qū)呼叫中心外呼系統(tǒng) 萬全縣地圖標(biāo)注app 如何根據(jù)經(jīng)緯度百度地圖標(biāo)注 電話機(jī)器人公司招聘 新鄭電銷機(jī)器人一個(gè)月多少錢 騰訊地圖標(biāo)注中心怎么標(biāo)注 六寸地圖標(biāo)注點(diǎn)怎么刪除 地圖標(biāo)注的圖案 莫拉克電梯系統(tǒng)外呼怎么設(shè)置

前些天看到一篇關(guān)于Metasploit與PowerShell的文章,里面提到了一句關(guān)于端口掃描的語句,寫的很簡練,思路很不錯(cuò),可以拋開笨重的Nmap直接掃描指定的指定IP的端口:

復(fù)制代碼 代碼如下:

1..1024 | %{ echo ((new-object Net.Sockets.TcpClient).Connect("192.168.10.26",$_)) "$_ is open"} 2>$null

      語句中直接通過..列舉了1到1024之間的數(shù)字,通過管道次傳遞給后面的操作符,使用New-Object創(chuàng)建System.Net.Sockets.TCPClient對(duì)象,調(diào)用該對(duì)象的Connect()方法連接指定IP的指定端口,而端口則是由管道傳入的入組對(duì)象,也就是前面提到的1~1024及其之間的的數(shù)字,是由$_這個(gè)自動(dòng)變量來代替,代表管道傳入的當(dāng)前的對(duì)象。對(duì)于開放TCP端口是會(huì)有相應(yīng)的程序監(jiān)聽該端口的,等待程序連接,如果連接了一個(gè)未曾起監(jiān)聽的端口,TCPClient對(duì)象是會(huì)拋出以下的異常

復(fù)制代碼 代碼如下:

“Exception calling "Connect" with "2" argument(s): "由于目標(biāo)機(jī)器積極拒絕,無法連接。 192.168.10.26:1"”

     對(duì)于拋出的異常通過2>$null的方式將錯(cuò)誤信息重定向到$null的空設(shè)備,而不再當(dāng)前屏幕輸出,于此同時(shí)如果在對(duì)指定端口進(jìn)行連接的過程中未曾拋出異常說明TCPClient對(duì)象可以正常連接到端口,則打印出該端口并提示該端口是打開的。

     通過PowerShell對(duì).net對(duì)象的調(diào)用我們可以做很多的事情,基本上用WinForm和asp.net能做的事情大多可以通過PowerShell進(jìn)行操作,與此同時(shí)我有了一個(gè)想法,通過PowerShell是否可以寫出一些常用的用于安全和滲透測試的工作腳本,這些腳本可以組合成一個(gè)工具集,這不就能在手邊沒有相關(guān)滲透工具的情況下用 輕量級(jí)的腳本環(huán)境+編程 實(shí)現(xiàn)安全相關(guān)的功能檢測呢?

    上面的腳本寫的很簡練了,但是有一個(gè)缺點(diǎn),就是調(diào)用的TCPClient對(duì)象超時(shí)時(shí)間比較長,不管端口是否開發(fā),都需要等到連接超時(shí)后才會(huì)掃描下一個(gè)端口,掃描一個(gè)區(qū)間的端口會(huì)耗費(fèi)很多的時(shí)間,鑒于此我打算改造上面的腳本,為了便于函數(shù)的共享和重用,創(chuàng)建一個(gè)名為PSNet的工具集:

Step 1:創(chuàng)建PowerShell的工作文件夾(D:\My Documents\WindowsPowerShell\Modules)并創(chuàng)建系統(tǒng)環(huán)境變量指向該目錄,便于后續(xù)調(diào)用,如PSSpace
Step 2.在上述步驟中提到的PSSpace路徑中創(chuàng)建與目標(biāo)module同名的目錄用于存放腳本,即在%PSSpace%下創(chuàng)建PSNet
Step 3.在PSNet目錄下創(chuàng)建與module同名的.psm1文件PSNet.psm1
Step 4.在PSNet目錄下創(chuàng)建相關(guān)細(xì)分的子函數(shù)目錄,便于不同類型操作進(jìn)行分類,如創(chuàng)建TCPOp,用于創(chuàng)建TCP相關(guān)操作,并把Test-TCPPort.ps1放入其中
Step 5.打開PSNet.psm1加入行:.$PSSpace/TCPOp/Test-TCPPort.ps1 以后如果要?jiǎng)?chuàng)建任何相關(guān)函數(shù)文件都可以添加一條記錄到此文件,以便module初始化的時(shí)候可以初始化相關(guān)的函數(shù),如果相關(guān)函數(shù)相互之間存在依賴關(guān)系,被依賴的文件初始化語句需要放在有依賴關(guān)系的文件語句之前
Step 6. 在Test-TCPPort.ps1語句的最后面添加Export-ModuleMember -Function * 語句用于將該文件中的函數(shù)都作為Module的成員發(fā)布。

     至此工具集的結(jié)構(gòu)創(chuàng)建成功,目錄樹如下所示:

復(fù)制代碼 代碼如下:

+D:\MY DOCUMENTS\WINDOWSPOWERSHELL\MODULES
└─PSNet
    │  PSNet.psm1
    │ 
    └─TCPOp
            Test-TCPPort.ps1
     如果我們要在PSNet下創(chuàng)建關(guān)于UDP相關(guān)的操作可以與TCPOp同級(jí)創(chuàng)建UDPOp子模塊目錄,依次類推,與網(wǎng)絡(luò)相關(guān)的操作子模塊均放在PSNet下,再預(yù)先創(chuàng)建一個(gè)PSSecurity模塊用于后續(xù)創(chuàng)建于安全相關(guān)的模塊。目錄結(jié)構(gòu)如下:
D:\MY DOCUMENTS\WINDOWSPOWERSHELL\MODULES
├─PSNet
│  │  PSNet.psm1
│  │ 
│  ├─TCPOp
│  │      Test-TCPPort.ps1
│  │     
│  └─UDPOp
└─PSSecurity

    對(duì)于Test-TCPPort.ps1子模塊,寫入以下代碼用于實(shí)現(xiàn)對(duì)TCP端口是否監(jiān)聽進(jìn)行測試:

復(fù)制代碼 代碼如下:

Function Test-TCPPort
{
 param ( [ValidateNotNullOrEmpty()]
 [string] $EndPoint = $(throw "Please specify an EndPoint (Host or IP Address)"),
 [string] $Port = $(throw "Please specify a Port") )

 try
 {
  $TimeOut = 1000 #定義TCP端口超時(shí)時(shí)間
  if ( $IP = [System.Net.Dns]::GetHostAddresses($EndPoint) )
  {
   $Address = [System.Net.IPAddress]::Parse($IP)
   $Socket = New-Object System.Net.Sockets.TCPClient
   $Connect = $Socket.BeginConnect($Address,$Port,$null,$null)
   if ( $Connect.IsCompleted )
   {
    $Wait = $Connect.AsyncWaitHandle.WaitOne($TimeOut,$false)
    if(!$Wait)
    {
     $Socket.Close()
     return $false
    }
    else
    {
     $Socket.EndConnect($Connect)
     $Socket.Close()
     return $true
    }
   }
   else
   {
    return $false
   }
  }
  else
  {
   return $false
  }
 }
 catch{}
}

Export-ModuleMember -Function *  #用于將函數(shù)導(dǎo)出為模塊成員

對(duì)于此模塊可以通過PowerShell命令行使用以下語句 :

復(fù)制代碼 代碼如下:

Import-Module $env:PSSpace/PSNet
Test-TCPPort 192.168.10.26 80

    進(jìn)行調(diào)用,或者通過命令行或者批處理啟動(dòng)時(shí)指定

復(fù)制代碼 代碼如下:

start %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -noExit -Command "Import-Module ‘%PSSpace%\PSNet' "

     對(duì)于本文最初的那個(gè)例子,在有了導(dǎo)入這個(gè)模塊后執(zhí)行:

復(fù)制代碼 代碼如下:

1..1024 | %{$A=(Test-tcpport 192.168.10.26 $_)

if($a) {
echo $_
}
}

在本文通過一段小腳本的方式引入了通過PowerShell實(shí)現(xiàn)簡單安全滲透功能的想法,首先介紹了該小腳本是如何實(shí)現(xiàn)功能的,接下來對(duì)創(chuàng)建腳本工具集并導(dǎo)入的方法,隨后又在該工具集中創(chuàng)建了Test-TCPPort函數(shù),并介紹了調(diào)用方法,在后續(xù)的文章中將會(huì)陸續(xù)介紹相關(guān)腳本的開發(fā),盡請(qǐng)期待。

您可能感興趣的文章:
  • PowerShell腳本開發(fā)之收發(fā)TCP消息包
  • PowerShell腳本開發(fā)之收發(fā)UDP消息包
  • PowerShell腳本開發(fā)嘗試登錄SQL Server
  • PowerShell腳本開發(fā)之批量掃描IP和端口

標(biāo)簽:喀什 疫苗接種 南昌 天水 汕頭 臨汾 襄陽 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PowerShell腳本開發(fā)之對(duì)指定IP進(jìn)行端口掃描》,本文關(guān)鍵詞  PowerShell,腳本,開,發(fā)之,對(duì),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PowerShell腳本開發(fā)之對(duì)指定IP進(jìn)行端口掃描》相關(guān)的同類信息!
  • 本頁收集關(guān)于PowerShell腳本開發(fā)之對(duì)指定IP進(jìn)行端口掃描的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章