2016-11-08 33 views
0

拉子,我試圖從URI的名單拉眼前這個PowerShell的 - 從URI

hrbkr.com 
smqzc.com 
znynf.com 

在$溫度這樣的 -

anything.anything.hrbkr.com 
anything.anything.smqzc.com 
anything.anything.znynf.com 

此正則表達式似乎以匹配至少在regex101 -

(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(?<fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?' 

但這似乎並沒有給我任何結果,我能得到它的整條生產線相匹配,但我只是想牛逼如果行匹配,他'substring'不是真的。

$temp = ‘c:\Users\money\Downloads\phishinglist.txt’ 
$regex = '(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(? <fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?' 
$temp | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } | Sort-Object -Unique > $list 
$list 

謝謝!

+1

System.Uri類應該幫助你http:// stac koverflow.com/questions/14363214/get-domain-from-url-in-powershell –

回答

4

如果該文件只包含FQDN和沒有別的,你可以很容易地用一個簡單的-split-join操作解決它:

# Split FQDN into individual labels 
$labels = 'anything.anything.smqzc.com' -split '\.' 

# Grab second-to-last and last label, join with a dot 
$domain = $labels[-2,-1] -join '.' 

或者在單個語句:

$domain = ("anything.anything.smqzc.com" -split '\.')[-2,-1] -join '.' 

所以你的程序最後看起來像:

$list = Get-Content $HOME\Downloads\phishinglist.txt |ForEach-Object { 
    ($_ -split '\.')[-2,-1] -join '.' 
} 
+0

這將適用於像.com/net/org這樣的單個前綴的域,但對於包含兩個部分的前綴無法正確返回。 bbc.co.uk或ausregistry.com.au –

+0

看起來這是比我有的更好的開始,我會添加一個if語句和tld數組,所以如果它像@James C.建議它會抓住最後三個。否則,只抓住最後兩個。我認爲這將工作...許多非常感謝!當我想出它時,我會嘗試並記住將其發回。 – JohnRain