当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 查找 IP 地理位置

作者:精品下载站 日期:2024-12-14 13:25:51 浏览:12 分类:玩电脑

使用 PowerShell 查找 IP 地理位置


[玩转系统] 使用 PowerShell 查找 IP 地理位置

因此,您已经获得了 IP 列表,并想知道它们的地理位置。

也许您在研究被黑的 Office 365 帐户时使用 Search-UnifiedAuditLog 从 Office 365 审核日志中编译了 IP 列表?或者可能来自您的 VPN 服务、受密码保护的 Extranet 或远程桌面会话列表。

无论如何,您可以使用 PowerShell 和众多免费的在线 IP 地理定位 API 之一来查找这些 IP 的地理位置。我会告诉你如何做。

地理定位查找服务的使用

ip-api 就是此类在线 IP 地理定位 API 提供商之一。 ip-api 允许您查询任何 IP 地址,并将返回带有地理位置信息的格式良好的 JSON 对象。例如,让我们尝试使用 PowerShell 查找 Whitehouse.gov:

PS C:\> Resolve-DnsName whitehouse.gov -Type A | ft Name,IPAddress

Name           IPAddress
----           ---------
whitehouse.gov 23.197.12.199


PS C:\> Invoke-RestMethod -Method Get -Uri "http://ip-api.com/json/23.197.12.199"


as          : AS16625 Akamai Technologies, Inc.
city        : Düsseldorf
country     : Germany
countryCode : DE
isp         : Akamai Technologies
lat         : 51.2277
lon         : 6.77346
org         : Akamai International, BV
query       : 23.197.12.199
region      : NW
regionName  : North Rhine-Westphalia
status      : success
timezone    : Europe/Berlin
zip         : 40213

DNS 主机名解析为 IP 地址,并且该 IP 地址用于对 ip-api.com 的常规 Web 查询。

毫不奇怪,whitehouse.gov 当然位于德国西部! ?

JSON 响应中返回多个属性。对于 IP 地址列表的标准取证分析,我建议抓住以下四个属性:

  • 查询(正在查询的IP地址)
  • 城市
  • 国家
  • 互联网服务供应商

分析 IP 地址列表

假设您有一长串要分析的(唯一)IP,让我们创建一个脚本,为您提供每个 IP 地址的有价值的地理信息。

为了让生活更轻松,我们首先创建一个 PowerShell 函数来客观化地理位置信息:

function Get-IPGeolocation {
  Param
  (
    [string]$IPAddress
  )
 
  $request = Invoke-RestMethod -Method Get -Uri "http://ip-api.com/json/$IPAddress"
 
  [PSCustomObject]@{
    IP      = $request.query
    City    = $request.city
    Country = $request.country
    Isp     = $request.isp
  }
}

现在只需针对此函数迭代 IP 列表即可。

但是——请注意! ip-api.com 提供商受到每分钟 45 次查询的限制,免受滥用!如果你超过这个限制,你的IP将被封锁,你必须登录他们的网站才能再次解锁(当你被封锁时,这并不容易!)。

由于您可能有一长串 +45 个 IP,因此我为您省去了麻烦,并创建了一个脚本,每 40 个查询将等待 70 秒(为了安全起见)。

请注意!如果您已经是 ip-api.com 的客户,则需要使用稍微不同的 URL 并将您的 API 密钥包含在请求正文中,如下所示:

$request = Invoke-RestMethod -Method Get -Uri "http://pro.ip-api.com/json/$IPAddress" -Body @{key='API_KEY'}

最终脚本如下所示:

function Get-IPGeolocation {
  Param
  (
    [string]$IPAddress
  ) 
  $request = Invoke-RestMethod -Method Get -Uri "http://ip-api.com/json/$IPAddress"
  [PSCustomObject]@{
    IP      = $request.query
    City    = $request.city
    Country = $request.country
    Isp     = $request.isp
  }
}
$OutputFile = ".\IP_GeoLocation.csv"
$i = 0
$IPs = Get-Content ".\IPs.txt"
ForEach ($IP In $IPs) {
  $i++    # More than 45 queries per minute gets you banned from ip-api.com
  If ($i -gt 40) {
    Write-Host Just pausing a minute to avoid IP blocking from ip-api.com
    Start-Sleep 70
    $i = 0
  }
  Get-IPGeolocation($IP) | Select-Object IP, City, Country, Isp | Export-Csv $OutputFile -NoTypeInformation -Append
}

该脚本假设您有一个输入文件“IPs.txt”,其中包含唯一 IP 地址列表。

查看数据

上面的脚本生成一个 Excel 输出,可能类似于以下内容:

[玩转系统] 使用 PowerShell 查找 IP 地理位置

现在,这只是一个例子——我并不是想暗示尼日利亚有任何可疑之处。但假设您没有任何员工在该国家/地区工作或访问,则发现尼日利亚 IP 地址连接到您的 Office 365 环境(或 VPN 或远程桌面或您正在分析的任何日志文件)可能会显得很奇怪。

更深入的分析

当您识别出一个或多个可疑 IP 后,请使用它们进一步分析您的日志文件。例如,如果您正在调查 Office 365 漏洞,请将可疑 IP 放入输入文件中并运行以下脚本:

$IPs = get-content ".\Suspicious_IPs.txt"
$OutputFile = ".\UnifiedAuditLog_IPs.csv"
$EndDate = Get-Date -Date (Get-Date -Format “yyyy-MM-dd”)
$intDays = 90
For ($i=0; $i -le $intDays; $i++){
  $Audit = Search-UnifiedAuditLog -EndDate $EndDate.AddDays(-$i + 1) -StartDate $EndDate.AddDays(-$i) -IPAddresses $IPs -ResultSize 5000
  $ConvertAudit = $Audit | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
  $ConvertAudit | Select-Object CreationTime,UserId,Operation,Workload,ObjectID,SiteUrl,SourceFileName,ClientIP,UserAgent | Export-Csv $OutputFile -NoTypeInformation -Append
  Write-Host $i `t $Audit.Count
}

这将生成一个输出文件,其中准确列出使用了哪些凭据以及使用可疑 IP 访问了哪些资源。这是非常有用的信息,对于进一步控制损失以及作为您想要采取法律行动的证据。

总结一下

我强烈建议主动使用此技术:如果您的用户群在地理上受到限制(某些国家或地区),您可以为关键资源设置警报,以防检测到不规则访问。

有关使用 PowerShell 分析 Office 365 审核日志的更多详细信息,请参阅这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯