code

PowerShell의 URL에서 도메인 가져오기

starcafe 2023. 8. 26. 12:00
반응형

PowerShell의 URL에서 도메인 가져오기

이 시나리오에서 PowerShell을 사용하여 도메인을 제거하려고 합니다.가장 효과적인 방법은 무엇입니까?example.com다음 변수 중에서?

$URL = "http://www.example.com/folder/"

(여기서 PowerShell을 사용하여 $URL을 $DOMAIN으로 변환/스트립하는 일종의 regex 명령)

$DOMAIN = "example.com" #<-- taken from $URL

검색해보니 도메인에서 IP 주소를 찾는 결과가 나왔는데 regex(또는 다른 방법)를 사용하여 먼저 도메인이 무엇인지 확인해야 합니다.

URI 클래스를 사용해 보십시오.

PS> [System.Uri]"http://www.example.com/folder/"

AbsolutePath   : /folder/
AbsoluteUri    : http://www.example.com/folder/
LocalPath      : /folder/
Authority      : www.example.com
HostNameType   : Dns
IsDefaultPort  : True
IsFile         : False
IsLoopback     : False
PathAndQuery   : /folder/
Segments       : {/, folder/}
IsUnc          : False
Host           : www.example.com
Port           : 80
Query          :
Fragment       :
Scheme         : http
OriginalString : http://www.example.com/folder/
DnsSafeHost    : www.example.com
IsAbsoluteUri  : True
UserEscaped    : False
UserInfo       :

www 접두사를 제거합니다.

PS> ([System.Uri]"http://www.example.com/folder/").Host -replace '^www\.'
example.com

다음과 같이:

PS C:\ps> [uri]$URL = "http://www.example.com/folder/"
PS C:\ps> $domain = $url.Authority -replace '^www\.'
PS C:\ps> $domain
example.com

하위 도메인을 올바르게 계산하려면 두 번째에서 마지막 기간을 알아야 합니다.그런 다음 전체 도메인 길이에서 두 번째 기간(또는 0)의 위치를 빼서 마지막 기간(하나만 해당하는 경우 없음)의 하위 문자열을 최종 위치로 가져옵니다.이렇게 하면 적절한 도메인만 반환되고 TLD 아래에 중첩된 하위 도메인 수에 관계없이 작동합니다.

$domain.substring((($domain.substring(0,$domain.lastindexof("."))).lastindexof(".")+1),$domain.length-(($domain.substring(0,$domain.lastindexof("."))).lastindexof(".")+1))

또한 시스템 URI 자체는 99%의 시간 동안 유효하지만 IIS 로그를 구문 분석하는 중에 매우 긴 URI(대부분 잘못된 요청/악의적인 요청)를 사용하면 URI가 제대로 구문 분석되지 않고 실패합니다.

기능 형태는 다음과 같습니다.

Function Get-DomainFromURL {
    <#
    .SYNOPSIS
    Takes string URL and returns domain only
    .DESCRIPTION
    Takes string URL and returns domain only
    .PARAMETER URL
    URL to parse for domain
    .NOTES
    Author: Dane Kantner 9/16/2016

    #>

    [CmdletBinding()]
        param(
        [Alias("URI")][parameter(Mandatory=$True,ValueFromPipeline=$True)][string] $URL
    )

    try { $URL=([System.URI]$URL).host }
    catch { write-error "Error parsing URL"}
    return $URL.substring((($URL.substring(0,$URL.lastindexof("."))).lastindexof(".")+1),$URL.length-(($URL.substring(0,$URL.lastindexof("."))).lastindexof(".")+1))
}

다음과 같이 정규식을 수행합니다.

[regex]::Match($URL, '(?<=\.).*?(?=[/|$])').value

이렇게 하면 첫 번째 점 이후에 첫 번째 슬래시 또는 문자열 끝까지 모두 표시됩니다.

언급URL : https://stackoverflow.com/questions/14363214/get-domain-from-url-in-powershell

반응형