想用c语言写一个程序,用system()来调用ping命令,然后拿到返回结果,通过对结果的分析来判断当前网段里有哪些ip被终端占用了。这样可以在需要一个ip的时候可以用。
#include<stdio.h>
int main() {
system("ping 127.0.0.1");
return 0;
}
如上边这段代码,运行之后没有什么反应,然后通过任务管理器看到不断增加ping和cmd的进程。不知道为什么。
然后尝试把结果输出到一个文本文件里:
#include<stdio.h>
int main() {
system("ping 127.0.0.1 >> a.txt");
return 0;
}
会出现下边这种现象:
把system里边的命令写成一个bat文件,一样会出现同样的结果。貌似ping这个命令本身就特殊。当system("ping")这样也会出现同样的问题,卡住。
有可能是端口冲突的问题
当然可以直接通过ICMP协议来编写程序。
用c语言循环打印ping 当前网段里所有ip的命令>>a.txt 到一个bat文件里运行。
ping 192.168.0.1 -n 2 //-n要发送的回显请求数
还是不能全部写进txt文件里,如果可以的话可以使用c语言的字符串函数strstr去判断是否有ping通的关键字来判断。
这个问题待研究
这个问题后来解决了,使用c语言用循环先写一个批处理文件,最有一位循环一个网段(后边省略了):
ping 192.168.11.1
ping 192.168.11.2
ping 192.168.11.3
ping 192.168.11.4
ping 192.168.11.5
ping 192.168.11.6
ping 192.168.11.7
然后讲结果输出到一个txt文档里,不知道为什么这个只能在C盘可以运行
C:\Users\lican>ping 192.168.11.1
正在 Ping 192.168.11.1 具有 32 字节的数据:
来自 192.168.11.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.11.1 的回复: 字节=32 时间=5ms TTL=64
来自 192.168.11.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.11.1 的回复: 字节=32 时间=3ms TTL=64
192.168.11.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 5ms,平均 = 2ms
C:\Users\lican>ping 192.168.11.2
正在 Ping 192.168.11.2 具有 32 字节的数据:
来自 192.168.11.2 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.11.2 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.11.2 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.11.2 的回复: 字节=32 时间<1ms TTL=64
192.168.11.2 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms
这样就把ping的结果输出到一个文本文档里。
但是这个是没有意义的,延时太大。 研究的这个问题没有意义。。。