本帖最后由 婴儿 于 2010-12-28 13:32 编辑
提供一个办法,通过调用Windows命令行ipconfig /all来实现
如果ipconfig /all的结果类似以下这样:
Windows IP Configuration
Host Name . . . . . . . . . . . . : testhost
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Broadcom BCM5708C NetXtreme II GigE (NDIS VBD Client)
Physical Address. . . . . . . . . : 00-1E-B9-D3-20-E0
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 172.16.1.28
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.1.1
DNS Servers . . . . . . . . . . . : 202.98.96.68
61.139.2.69
只有一个连接,那么用下面代码可以实现:
-
- Action()
- {
- //取本机第一个MAC地址和IP
- char * filename = "c:\\temp.txt",* s1,* s2;
- char command[1024],buffer[10240],left[1024],IP[128],MAC[128];
- long file_stream;
- int len;
- sprintf(command, "ipconfig /all > %s", filename);
- system(command);//执行命令行(结果写到文件)
- //打开文件,读取,关闭文件,删除文件
- if ((file_stream = fopen(filename, "r")) == NULL) {
- lr_error_message ("Cannot open %s", filename);
- return -1;
- }
- fread(buffer, sizeof(char), 10240, file_stream);
- if (ferror(file_stream))
- lr_output_message ("Error reading file %s", filename);
- lr_output_message ("ipconfig /all = \n%s", buffer );
- if (fclose(file_stream))
- lr_error_message ("Error closing file %s", filename);
- remove(filename);
- //处理从文件读取的内容
- strcpy(left,"Physical Address. . . . . . . . . : ");
- len=strlen(left);
- s1=(char *)strstr(buffer,left);
- s1+=len;
- s2=(char *)strstr(s1,"\r\n");
- len=s2-s1;
- strncpy(MAC,s1,len);
- strcpy(left,"IP Address. . . . . . . . . . . . : ");
- len=strlen(left);
- s1=(char *)strstr(s2,left);
- s1+=len;
- s2=(char *)strstr(s1,"\r\n");
- len=s2-s1;
- strncpy(IP,s1,len);
- lr_output_message ("IP = %s,MAC = %s", IP, MAC);
-
- return 0;
- }
复制代码
处理字符串的部分,可以写成函数,更方便处理
如果有多个网卡,还需要进一步修改,可以先按网卡取相应的信息(如按关键词Ethernet adapter分块),再在各块中查找需要的内容(如按网段查找) |