106 networking
在我的工作中有很多电脑,我想开个玩笑。我可以通过网络关闭计算机,但对我来说很难找到 IP 地址。
如何轻松找到从 192.168.1.aa 到 192.168.1.zz 的所有在线 IP 地址?
Kev*_*wen 157
通常,nmap对于快速扫描网络非常有用。
要安装 nmap,请在终端中输入以下命令:
sudo apt-get install nmap
Run Code Online (Sandbox Code Playgroud)
安装应用程序后,输入以下命令:
nmap -sn 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
这将显示哪些主机响应了 192.168.1.0 和 192.168.1.255 之间网络上的 ping 请求。
对于旧版本的 Nmap,请使用-sP:
nmap -sP 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
有关其他参考资料,请参阅以下页面:
这是一个非常有用的学习工具。
Eri*_*lho 43
如果您网络中的所有计算机都是 Ubuntu 或任何其他使用avahi-daemon(DNS-SD)的发行版,您可以通过执行以下操作获得它们的详细列表(带有主机名和 IP 地址):
avahi-browse -rt _workstation._tcp
Run Code Online (Sandbox Code Playgroud)
如果您想知道网络中使用的所有 IP 地址,您可以使用arp-scan:
sudo arp-scan 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
由于默认情况下未安装它,因此您必须使用sudo apt-get install arp-scan. arp-scan将 ARP 数据包发送到本地网络并显示收到的响应,因此它甚至可以显示受防火墙保护的主机(基于 IP 数据包阻止流量)。
Ser*_*nyy 18
读者请注意:原答案已在不久前发布,当时我只是在学习 shell 脚本。请参阅下面重新访问的版本,以获取执行速度更快的新改进脚本。
nmap将是我的第一选择,但如果你没有它怎么办?DIY 方法是使用 ping 脚本手动遍历网络上的每个可能的 IP 地址。我们这里只有while循环,我们设置地址中的最后一个数字,对地址进行静默单ping,检查命令是否成功(如果成功,则主机显然已启动)和printf语句。快速而肮脏的方式,我花了大约 10 分钟来编写它,但是运行时可能会有点慢。
#!/bin/sh
# set -x
NUM=1
while [ $NUM -lt 256 ];do
ping -q -c 1 192.168.0.$NUM > /dev/null
RESULT=$(echo $?)
if [ $RESULT -eq 0 ]; then
printf 192.168.0.$NUM"\n"
fi
NUM=$(expr $NUM + 1)
done
Run Code Online (Sandbox Code Playgroud)
我最初在 2015 年 8 月发布了这个答案。从那时起,我对 shell 脚本有了更多的了解,当我看到这个脚本时,我认为重新访问这个答案以添加一些改进是个好主意。这里有一些想法:
该脚本显然很慢并ping等待主机的响应。默认情况下,ping对于两个 RTT,这取决于您的网络拥塞程度,据我所知,TCP 协议每次都会将等待时间加倍(至少根据this)。所以我们可以ping用-w 1flag强制超时。由于我们有 256 个地址,并且我们假设每个地址需要 1 秒,因此脚本大约需要 256/60 = 4.27 分钟。
执行命令然后捕获其退出状态$?并不是真正必要的。在if ... then;...fi可以在命令直接操作。换句话说,这样做就足够了:
if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
then
<some other code here>
fi
Run Code Online (Sandbox Code Playgroud)该printf命令可以改写为:
printf "IP %s is up\n" 192.168.0."$NUM"
Run Code Online (Sandbox Code Playgroud)
这更像是一种风格变化,但它与printf许多其他语言的工作方式和外观一致,带有引用"$NUM"变量。这里没有必要引用——因为我们只处理数字,我们不需要预测由于变量中有空格而导致的分词。
如果我们生成多个后台进程,可以实现更好的性能改进。下面的脚本编辑正是这样做的。我把pingand printf放到一个函数中,pingf(是的,老生常谈的名字,我知道)。现在,还有一个main函数可以循环和调用pingf.
if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
then
<some other code here>
fi
Run Code Online (Sandbox Code Playgroud)
这有多好?实际上,还不错,只需几秒钟。
$ time ./ping_script.sh
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
0m02.50s real 0m00.01s user 0m00.12s system
Run Code Online (Sandbox Code Playgroud)
小智 16
Netdiscover 可以是您的答案。
通过终端安装:
sudo apt-get install netdiscover
Run Code Online (Sandbox Code Playgroud)
示例用法:
sudo netdiscover -r 192.168.1.0/24 -i wlan0
Run Code Online (Sandbox Code Playgroud)
带有 MAC 地址的 IP 将显示在您的终端上。看截图
希望能帮到你
| 归档时间: |
|
| 查看次数: |
378322 次 |
| 最近记录: |