네트워크를 검색하고 모든 Windows 시스템의 호스트 이름을 나열하려고합니다. ip 범위를 입력으로 사용하여 호스트 이름을 반환하는 인터페이스 메소드가 있습니다. 나는 그것을 구현해야한다. 그래서 내 코드는 다음과 같습니다.IP 범위에서 Windows PC를 찾는 방법
public ICollection<string> EnumerateWindowsComputers(ICollection<string> ipList)
{
ICollection<string> hostNames = new List<string>();
foreach (var ip in ipList)
{
var hostName = GetHostName(ip);
if (string.IsNullOrEmpty(hostName) == false)
{
hostNames.Add(hostName)
}
}
return hostNames;
}
private static string GetHostName(string ipAddress)
{
try
{
IPHostEntry entry = Dns.GetHostEntry(ipAddress);
if (entry != null)
{
return entry.HostName;
}
}
catch (SocketException ex)
{
System.Console.WriteLine(ex.Message + " - " + ipAddress);
}
return null;
}
이 방법은 모든 Windows 시스템을 성공적으로 열거하지만 네트워크 프린터가 있습니다. 내 프린터의 호스트 이름은 쉽게 무시할 수 있지만 좋은 해결책은 아닙니다. Windows 운영 체제가있는 장치 만 반환했는지 확인해야합니다.
제 3 자 라이브러리없이 어떻게 할 수 있습니까? 더 좋은 방법이 있다면 GetHostName
메서드를 사용할 필요가 없습니다.
P. Linux, MacOS, Android 및 IOS 장치는 예상대로 찾을 수 없습니다. 리눅스 또는 안정적으로 원격 Windows OS 정보를 가져 윈도우 머신에서 윈도우 파일 공유
사용 systeminfo /s IPADDRESS
쉘 명령을 모방 다른 상자가있을 수 있으므로
'TCP NetBIOS' 포트가 openend 포트 139인지 확인할 수 있습니다. (windows filesharing) 왜 Windows 시스템이어야합니까? 너 뭐 찾고있어? 파일 공유? 특정 소프트웨어를 연결할 수 있습니까? –
감사합니다. 하지만 파일 공유 포트가 변경되면 어떻게해야합니까? 가능한가? 원격 PC에서 exe를 실행하는 또 다른 방법이 있습니다 (psexec 포함). 원격 컴퓨터가 Windows라고 확신하지 않으면 시도하고 싶지 않습니다. – madjack