我正在构建一个小型 Linux 机器,它将只运行一个 Web 服务器。这台小型机器的目的是被放入一个临时位置的小型临时网络中,该位置无法访问互联网,为本地网络提供 Web 服务
问题是,客户端如何发现机器的地址?
静态 IP 并不理想,因为它应该能够在任何本地网络上运行,因此 DHCP 几乎是必须的。从盒子中运行 dns 和 dhcp 服务器是一种选择,但不是首选,因为网络可能已经有这样的服务,而盒子会与之冲突。
不过这些是我能想到的唯一方法。还有其他想法吗?
答案1
确保为计算机设置了主机名。假设您连接的每个网络都运行自己的 DNS/dhcp,那么当它获得 dhcp 地址时,它应该(在正常设置中)自动向本地 DNS 服务器注册其主机名
因此,将其设置为 MYAWESOMEWEBSERVER,并告诉所有客户端访问该主机名和魔法(大多数浏览器只需输入http://myawesomewebserver浏览器执行 DNS 并获得本地 IP)
在大多数 Linux 计算机上,只需编辑 /etc/hostname 即可设置主机名
编辑对于最强大/冗余的构建,我建议你有一个启动脚本来测试 LAN 是否有活动的 dhcp/DNS 服务(如果是,则接受 dhcp 地址),如果没有,则在本地启动 DNS/dhcp 服务器并应用静态 ip
答案2
您可以使用 nmap 扫描网络。例如,如果您的 Web 服务器在 tcp:80 上运行,并且您的子网是 192.168.1.0,那么您可以尝试:
nmap 192.168.1.0/24 -p 80
在我的网络上我得到
Starting Nmap 6.47 ( http://nmap.org ) at 2015-04-27 19:36 AEST
Nmap scan report for 192-168-1-1.tpgi.com.au (192.168.1.1)
Host is up (0.022s latency).
PORT STATE SERVICE
80/tcp open http
Nmap scan report for 192-168-1-8.tpgi.com.au (192.168.1.8)
Host is up (0.00011s latency).
PORT STATE SERVICE
80/tcp closed http
因此,您可以看到地址 192.168.1.1 上有一个 Web 服务器(这是我的路由)。您还可以看到网络上还有另一台机器,但它的 80 端口已关闭,因此它不是 Web 服务器