2016-11-08 2 views
0

Я пытаюсь вытащить только этотPowershell - подтягивание подстроки из Ури

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]+)))))$)*?' 

но это, кажется, не дает мне никаких результатов, я могу получить его в соответствие всей линии, но я просто хочу, т он «подстрока» не является истиной, если линия соответствует.

$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

Если файл содержит только FQDNs и больше ничего, вы можете решить это легко с помощью простого -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

Смежные вопросы