簡體   English   中英

如何使用Ruby獲取Windows網絡中的計算機名稱列表

[英]How can I get the list of computer names in Windows Network using Ruby

我知道Ruby有很多寶石,允許程序員編寫一個非常美麗的代碼。 默認情況下,此簡短示例掃描子網192.168.1.x上的所有地址。

require 'ipscanner'
a = IPScanner.scan
#=> ["192.168.1.1", "192.168.1.4"]

我怎樣才能獲得計算機名稱而不是ip? 有沒有實現Window API(NetBIOS)的gem? 也許最好使用smth。 像macaddr http://rubygems.org/gems/macaddr解析'ipconfig / all'(在我的情況下 - 'nbtstat')

那個ipscanner gem看起來只是循環通過192.168.1。(1..254)並構建了一個沒有超時的ip地址數組: TCPSocket .new(ip_address)

因此,一種方法可能是在給定IP地址的情況下反向查找主機名。 看起來Socket類可以幫助你。

例如:

Socket.do_not_reverse_lookup = false
s = Socket.getaddrinfo(’66.249.67.49′,nil)
hostname = s[0][4]

要么

host = Resolv.new.getname('66.249.67.49')

代碼取自博客

我在網絡上沒有任何計算機來測試這個,我對這些東西知之甚少,不知道IP上的計算機名稱和IP上的主機名之間是否有區別。 如果上述方法不起作用,則不能太遠。

感謝@danneu。

我寫了一個簡單的例子,在Windows 7上運行得很好。檢查你的防火牆策略(你可以得到ip而不是計算機名)! 計算機的名稱是第三個參數,因此使用hostname = Socket.getaddrinfo('192.168.1.10',nil)[0] [2]。

require 'ipscanner'
Socket.do_not_reverse_lookup = false
IPScanner.scan.each { 
    |i|
    puts "#{Socket.getaddrinfo(i, nil)}"    
}

輸出:

[["AF_INET", 0, "STARBOY", 192.168.1.2, 2, 0, 0]]
[["AF_INET", 0, 192.168.1.1, 192.168.1.1, 2, 0, 0]]
[["AF_INET", 0, "mcx-PC", 192.168.1.4, 2, 0, 0]]

這個例子更具說明性,它一直在等待所有線程的完成。 Pingecho超時增加到50毫秒。

require 'ipscanner'

puts 'List of computers in your LAN. Please wait ...'

class IPScanner
    # override scan method
    def self.scan(ip_base = '192.168.1.', range = 1..254, t = 50)
        computers = [] 
        threads = []  
        Socket.do_not_reverse_lookup = false    
        (range).map { 
            |i| 
            threads << Thread.new {
                ip = ip_base + i.to_s
                if pingecho(ip, t) 
                    computers << Socket.getaddrinfo(ip, nil)[0][2]                    
                end
            }
        }.join      
        # wait for all threads to terminate
        threads.each { |thread| thread.join }
        return computers
    end
end

puts "#{IPScanner.scan}"

輸出:

["STARBOY", "192.168.1.1", "mcx-PC"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM