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

如何编写程序来报告本地IP地址,如192.168.1.102?,ip,local,gethostbyname,ifconfig,ipconfig,Ip,Local,Gethostbyname,Ifconfig,Ipconfig,由于我的Linksys路由器没有为计算机(PC、Mac和Linux)分配固定的本地IP,因此我想编写一个脚本,以便每分钟计算机都会相互更新,以便 在每台机器上都将包含所有PC和Mac的名称列表以及指向其apache服务器的链接(指向等) 它看起来像是一种通过PC上的ipconfig和Mac和Linux上的ifconfig来查找本地IP地址的方法,要以编程方式进行查找,它将是gethostbyname() 但我试过Ruby,那个 irb(main):001:0> require 'sock

由于我的Linksys路由器没有为计算机(PC、Mac和Linux)分配固定的本地IP,因此我想编写一个脚本,以便每分钟计算机都会相互更新,以便

在每台机器上都将包含所有PC和Mac的名称列表以及指向其apache服务器的链接(指向等)

它看起来像是一种通过PC上的ipconfig和Mac和Linux上的ifconfig来查找本地IP地址的方法,要以编程方式进行查找,它将是gethostbyname()

但我试过Ruby,那个

irb(main):001:0> require 'socket'
=> true

irb(main):002:0> p Socket::gethostbyname("localhost")
["Core2Duo", [], 2, "\177\000\000\001"]

irb(main):005:0> p Socket::gethostbyname("core2duo")
["Core2Duo", [], 2, "\300\250\001g"]
=> nil
而ipconfig实际上显示了这一点

IPv4 Address. . . . . . . . . . . : 192.168.1.103

那么这是正确的方法吗?我可以通过在Ruby中执行“ipconfig”并使用正则表达式来获得结果来破解它,但最好使用更标准的方法来实现。

您可以在Java中使用:

Socket s = new Socket();
s.getLocalSocketAddress();

您可以使用以下方法在Java中执行此操作:

Socket s = new Socket();
s.getLocalSocketAddress();
可能更符合您的需求:

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"
可能更符合您的需求:

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"

Ruby脚本中的问题可能是您的网络上没有DNS名称解析,如果您通常在使用SMB/CIFS的计算机之间共享内容,这通常是隐藏的,因为SMB/CIFS有自己的名称发现协议。

Ruby脚本中的问题可能是您的网络上没有DNS名称解析,如果您通常在使用SMB/CIFS的计算机之间共享内容,这通常是隐藏的,因为SMB/CIFS有自己的名称发现协议。

如果您在Windows系统上运行Bonjour,在Linux系统上运行avahi,则无需确定每个系统的IP地址。然后,您可以简单地使用“
hostname.local
”对每个系统进行寻址。更多信息。

如果在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或更高。

为什么不关闭这些机器的DHCP并为它们分配固定的IP地址呢


根据评论编辑:至少在三年前(上次我买路由器时),Linksys路由器允许您为内置DHCP服务器设置底部IP地址。然后,进入各个机器的网络设置,禁用DHCP,并分配物理地址。例如,在我的家庭网络上,路由器是192.168.1.1,Terastation是1.2,打印机是1.3,我的Linux机器是1.99,路由器被配置为1.100或更高。

如果你要广播带有名称/ip信息的数据报,那么你真的不需要PC来知道自己的ip地址。只需发送包含其名称的数据报,然后使用recvfrom()-或等效物-在其他PC上捕获它。这样,接收者就可以通过recvfrom()函数直接提取发送者的IP地址


作为奖励,如果发送PC有多个网络适配器,这应该可以工作。

如果您要广播带有名称/ip信息的数据报,那么您不需要PC知道自己的ip地址。只需发送包含其名称的数据报,然后使用recvfrom()-或等效物-在其他PC上捕获它。这样,接收者就可以通过recvfrom()函数直接提取发送者的IP地址


作为奖励,在发送PC具有多个网络适配器的情况下,这应该可以工作。

我的netgear路由器可以为每台计算机分配一个固定的本地IP。。。但我发现linksys路由器更可靠。我的朋友告诉我,他的d-link路由器带有wireless-n,速度快,可靠性高,还可以分配固定的本地IP。也许我会考虑,如果我使用有线互联网的速度,然后DSL互联网的可靠性和购买另一个路由器。与Bunjor,你不需要有固定的本地IPS。主机使用多播DNS相互告知IP地址。Bonjour非常适合家庭网络。由于限制和阻塞,在公司网络上不太好。我同意。我不认为OP是在和一个公司网络打交道。我希望一台计算机上有功能齐全的DNS。我的netgear路由器可以为每台计算机分配一个固定的本地IP。。。但我发现linksys路由器更可靠。我的朋友告诉我,他的d-link路由器带有wireless-n,速度快,可靠性高,还可以分配固定的本地IP。也许我会考虑,如果我使用有线互联网的速度,然后DSL互联网的可靠性和购买另一个路由器。与Bunjor,你不需要有固定的本地IPS。主机使用多播DNS相互告知IP地址。Bonjour非常适合家庭网络。由于限制和阻塞,在公司网络上不太好。我同意。我不认为OP是在和一个公司网络打交道。我希望在一个服务器上有功能齐全的DNS。linksys路由器也能做到吗?所以使用DHCP总是可选的,没有任何额外的好处?我的Linksys WRT54G路由器可以做到这一点。Linksys路由器也可以做到吗?因此,使用DHCP始终是可选的,没有其他好处?我的Linksys WRT54G路由器可以做到这一点。