我可以获得DOS 6.22操作系统的IP地址吗?

时间:2016-05-21 14:06:54

标签: c sockets dos

我正在使用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是否支持网络?

2 个答案:

答案 0 :(得分:3)

MS-DOS(我认为你与之相关,因为6.22是(如果不是)最后一个版本的发布之一;那些很多的DOSs)从来没有本机IP堆栈。

因此,没有统一查询系统"系统的方法" (或者实际上,任何与网络相关的东西)在MS-DOS下,因为MS-DOS从来没有内置任何网络,所以作为一个系统,它没有IP地址。也许一个可执行文件构建了一个以太网,其中包括IP连接,或者可能是常驻伪驱动程序,但不是操作系统。

这意味着您正在使用MS-DOS中存在的数百个第三方IP实现之一。你没有告诉我们哪个,所以我们无法帮助你。

现在,在编译未定义的常量时会出现错误 - 您可能没有使用正确的#include,或者没有配置您的编译器来查找正确的头文件目录。< / p>

无论如何,我建议你对C和MS-DOS有所了解,最重要的是,要弄清楚你正在使用哪种IP实现,以及从哪里获取文档。

答案 1 :(得分:2)

我相当确定DOS本身不支持IP网络。如果我没记错的话(这些东西很多多年前,所以我可能记错了)当天有一些TCP / IP堆可用于DOS - 也许你可以挖掘其中一些并使用它们。

但实际上,为什么你在2016年使用这样的过时操作系统呢?