我想在本地网络中搜索可以与之通信的特殊服务器。为了实现这一点,我正在运行一个 for 循环 ping 我给该函数的范围内的所有 IP 地址。
例如
findServers("192.168.0.x", 101, 255)
ping 192.168.0.101
和 192.168.0.255
之间的所有地址,如果可以访问,则尝试连接到特定端口以查明服务器是否正在运行。
但我不想手动输入范围。有什么方法可以获取 DHCP 服务器为网络中的计算机分配地址的 IP 范围吗?
获取此信息的唯一方法是询问 DHCP 服务器的管理员。一种远程可能性是 DHCP 服务器也公开了 SNMP 服务器并且该 SNMP 服务器提供了信息。然而,没有一个称职的系统管理员会泄露这些信息,所以这是不可能的。
简而言之,答案大约 99.9% 的可能性是“你不能”。
您可以查看您的计算机的子网并尝试连接到有问题的端口。这样您就无需知道 DHCP 将给出的具体地址范围。
您不需要确定主机是否可访问,因为您仍然需要尝试连接到该端口。如果您使用线程池连接到 255 个地址,则需要几秒钟的时间。
您可以使用 UDP,而不是使用 TCP。 UDP 可以使用单个数据包向整个子网发送广播或多播。这将允许您向任意数量的机器发送请求,以了解它们是否有可用的服务。
我知道它很旧,但也许有人用谷歌搜索它。您可以使用 PowerShell 获取它:
$dhcpserver = "10.17.5.1"
$ScopeList = Get-DhcpServerv4Scope -ComputerName $dhcpserver | Where-Object {$_.name -like "*toip*"}
ForEach($Scope in $ScopeList){
$voip += Get-DhcpServerv4Lease -ComputerName $dhcpserver -ScopeId $Scope.ScopeId
}
仅当 Voip 的范围具有类似“toip”的模式时,这才有效。
$DHCPServer="<name or IP address of DHCP Server>"
$Cred=Get-Credential -Message "Input credentials" -UserName "<username>"
$CimSession=New-CimSession -ComputerName $DHCPServer -Credential $Cred
$Scopes=Get-DhcpServerv4Scope -ComputerName $DHCPServer -CimSession $CimSession
Remove-CimSession -CimSession $CimSession
$Scopes | Select-Object -Property ScopeId,Name,Description,StartRange,EndRange