我正在使用 DOS 6.22,我需要使用 C 程序提取系统的 IP 地址。
int main()
{
int n;
struct ifreq ifr;
char array[] = "eth0";
n = socket(AF_INET, SOCK_DGRAM, 0);
//Type of address to retrieve - IPv4 IP address
ifr.ifr_addr.sa_family = AF_INET;
//Copy the interface name in the ifreq structure
strncpy(ifr.ifr_name , array , IFNAMSIZ - 1);
ioctl(n, SIOCGIFADDR, &ifr);
close(n);
//display result
printf("IP Address is %s - %s\n" , array , inet_ntoa(( (struct sockaddr_in *)&ifr.ifr_addr )->sin_addr) );
return 0;
}
但错误的是,即使使用所有头文件,它也无法识别SIOCGIFADDR
变量。
DOS支持网络吗?
最佳答案
MS-DOS(我想您与它有关,因为 6.22 是(如果不是)最后发布的版本之一;有很多 DOS)从来没有本地 IP堆。
因此,在 MS-DOS 下没有统一的方法来查询“系统”的 IP(或者事实上,任何与网络相关的事物),因为 MS-DOS 从未内置任何网络,所以作为一个系统,它没有IP地址。也许单个可执行文件构建了以太网,并在其之上构建了 IP 连接,或者可能是驻留的伪驱动程序构建了,但不是操作系统。
这意味着您正在使用 MS-DOS 中存在的数百个第三方 IP 实现之一。您没有告诉我们具体是哪一个,所以我们无法帮助您。
现在,您在编译未定义常量时会遇到错误 - 您可能没有使用正确的#include
,或者没有配置编译器来查找正确的 header 目录。
无论如何,我建议您了解一些有关 C 和 MS-DOS 的知识,最重要的是,弄清楚您正在使用哪种 IP 实现,以及从哪里获取相关文档。
关于我可以获得 DOS 6.22 操作系统的 IP 地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363946/