这从一个简单的任务开始,向我网络中的主机发送类型 8 和代码 0 的 ICMP 包。由于我使用 Mac 做所有事情,所以我使用 macports 安装了 nemesis 并尝试了以下命令。
sudo nemesis icmp -i 8 -c 0 -P ./payload -D 172.16.148.133
这导致了错误。
ERROR: Incomplete packet injection. Only wrote -1 bytes.
ICMP Injection Failure
从那时起,我根本无法在两台已知良好的 Mac 电脑上使用 nemesis icmp,我总是收到同样的错误。
所以当我注意到这一点时,我的反应是简单地在 FreeBSD 8.2 系统上从端口 nemesis 1.4 build 26 进行编译,与在 OS X 上相同。
运行正常,没有错误,用户很开心。:)
但我不想每次使用 nemesis 时都登录 FreeBSD 系统,那么这里出了什么问题?我尝试从 sourceforge 上的源代码编译 nemesis 1.4 build 26,链接到 macports 在 /opt 中安装的 libnet,但没有什么效果。
注意:我尝试使用 root 终端在两个系统上运行这个 nemesis 命令,而不仅仅是通过 sudo。
答案1
这看起来像是 libnet 的一个失败。从 nemesis 的源代码来看:
if (got_link)
n = libnet_write_link_layer(l2, device, pkt, icmp_packetlen);
else
n = libnet_write_ip(sockfd, pkt, icmp_packetlen);
if (verbose == 2)
nemesis_hexdump(pkt, icmp_packetlen, HEX_ASCII_DECODE);
if (verbose == 3)
nemesis_hexdump(pkt, icmp_packetlen, HEX_RAW_DECODE);
if (n != icmp_packetlen)
{
fprintf(stderr, "ERROR: Incomplete packet injection. Only wrote "
"%d bytes.\n", n);
}
因此故障在libnet_write_ip()
或libnet_write_link_layer()
。
我建议从源代码手动重新编译 libnet,并将 nemesis 链接到该新副本。