You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Georgia Weidmann书籍的ping脚本报错求助:Ping unknown host

问题分析与解决

咱们一步步拆解你遇到的问题,逐个解决:

1. 脚本循环逻辑错误导致Ping unknown host

你的脚本里for x in 'seq 1 254'; do这一行有个关键错误:单引号会把seq 1 254当成一个普通字符串,而不是让shell执行这个命令生成1到254的数字序列。循环时$x的值就变成了seq 1 254,最终ping的目标会是192.168.x.x.seq 1 254——这显然是无效的主机地址,自然会提示Ping unknown host。

修复方案:把单引号换成$()(推荐,可读性更强)或者反引号,让shell执行seq命令生成数字序列:

for x in $(seq 1 254); do

2. 脚本运行参数使用错误

你示例里写的./pingscript.sh 192.168.x.x是不对的,这里的x需要替换成你实际的网段号。比如你的XP和Kali在192.168.1.x网段,就应该运行:

./pingscript.sh 192.168.1

这样脚本会自动拼接成192.168.1.1到192.168.1.254去逐个ping。

3. 关于8.8.8.8的疑问

8.8.8.8是Google提供的公共DNS服务器,它既不是你的XP目标机IP,也不是网关地址:

  • XP目标机的IP应该是和Kali同网段的私有IP(比如192.168.1.10)
  • 网关地址一般是你局域网路由器的IP(比如192.168.1.1)
  • 8.8.8.8的作用是解析域名(比如把google.com转换成对应IP),和你当前的局域网ping扫描脚本没有直接关系,除非你要测试目标机能否访问外网。

修复后的完整脚本

#!/bin/bash
if [ "$1" == "" ]
then
    echo "Usage: ./pingscript.sh [network]"
    echo "example: ./pingscript.sh 192.168.1"
else
    for x in $(seq 1 254); do
        ping -c 1 $1.$x | grep "64 bytes" | cut -d" " -f4 | sed 's/.$//'
    done
fi

额外优化:如果想让扫描速度更快,可以给ping命令加&让所有ping任务并行执行,最后用wait等待所有任务完成:

#!/bin/bash
if [ "$1" == "" ]
then
    echo "Usage: ./pingscript.sh [network]"
    echo "example: ./pingscript.sh 192.168.1"
else
    for x in $(seq 1 254); do
        ping -c 1 $1.$x | grep "64 bytes" | cut -d" " -f4 | sed 's/.$//' &
    done
    wait
fi

内容的提问来源于stack exchange,提问作者wurmh0le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:26