如何编写程序来报告本地IP地址,如192.168.1.102?

由于我的Linksys路由器没有为计算机(PC和Mac和Linux)分配固定的本地IP,我想编写一个脚本,以便每分钟,计算机将相互更新,以便 HTTP://localhost/list.html 在每台机器上将包含所有PC和Mac的名称列表以及指向其apache服务器的链接(指向http://192.168.1.102等) 看起来像是通过PC上的ipconfig找到本地IP地址的方法,以及Mac和Linux上的ifconfig,并以编程方式进行,它将是gethostbyname()。 但我试过Ruby,那个
irb(main):001:0> require 'socket'
=> true

irb(main):002:0> p Socket::gethostbyname("localhost")
["Core2Duo", [], 2, "177000001"]

irb(main):005:0> p Socket::gethostbyname("core2duo")
["Core2Duo", [], 2, "30025001g"]
=> nil
和ipconfig实际显示
IPv4 Address. . . . . . . . . . . : 192.168.1.103
这是正确的方法吗?我可以通过在Ruby中执行“ipconfig”并使用正则表达式来获取结果来破解它,但是使用更标准的方法来做它会很好。     
已邀请:
Socket::getaddrinfo
可能更符合您的要求:
Socket::getaddrinfo('localhost', 'http')
[["AF_INET", 80, "localhost", "127.0.0.1", ...]]

Socket::getaddrinfo('core2duo', 'http')
[["AF_INET", 80, "Core2Duo", "192.168.1.103", ...]]
或者,您可以尝试:
Socket::getaddrinfo('core2duo', 'http')[0][3]
"192.168.1.103"
    
您可以使用Java在Java中执行此操作:
Socket s = new Socket();
s.getLocalSocketAddress();
    
如果在Windows系统上运行Bonjour,在Linux系统上运行avahi,则可以取消确定每个系统的IP地址的需要。然后,您可以使用“
hostname.local
”简单地对每个系统进行寻址。更多信息在这里。     
为什么不关闭那些机器的DHCP并为它们分配固定的IP地址? 编辑以回应评论:至少在大约三年前(我上次购买路由器),Linksys路由器允许您为内置DHCP服务器设置底部IP地址。然后,您将进入单个计算机的网络设置,禁用DHCP并分配物理地址。例如,在我的家庭网络上,路由器是192.168.1.1,Terastation是1.2,打印机是1.3,我的Linux机箱是1.99,路由器配置为发出1.100及以上。     
Ruby脚本中的问题可能是您的网络上没有DNS名称解析,如果您经常在具有SMB / CIFS的计算机之间共享内容,这通常是隐藏的,因为它具有自己的名称发现协议。     
如果您打算使用名称/ ip info in广播数据报,那么您并不需要PC知道自己的IP地址。只需发送包含其名称的数据报,然后使用recvfrom() - 或等效物 - 在其他PC上捕获它。这样接收者可以通过recvfrom()函数直接提取发送者的IP地址。 作为奖励,这应该适用于发送PC具有多个网络适配器的地方。     

要回复问题请先登录注册