虽然现在一机多网卡已经很普遍(像Notebook带有线、无线、蓝芽等),但是找一个现成的能够一次过读出所有网卡IP地址的函数实在是难,无奈自己写了一个,好东西谁用谁知道。

  1. //uses WinSock;
  2. type
  3. PAddrInfoW = ^ADDRINFOW;
  4. ADDRINFOW = record
  5. ai_flags        : Integer;      // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST
  6. ai_family       : Integer;      // PF_xxx
  7. ai_socktype     : Integer;      // SOCK_xxx
  8. ai_protocol     : Integer;      // 0 or IPPROTO_xxx for IPv4 and IPv6
  9. ai_addrlen      : ULONG;        // Length of ai_addr
  10. ai_canonname    : PWideChar;    // Canonical name for nodename
  11. ai_addr         : PSOCKADDR;    // Binary address
  12. ai_next         : PAddrInfoW;   // Next structure in linked list
  13. end;
  14. PPaddrinfoW = ^PAddrInfoW;
  15. TAddrInfoW = ADDRINFOW;
  16. function GetAddrInfoW(NodeName: PWideChar; ServiceName: PWideChar; Hints: PaddrinfoW; ppResult: PPaddrinfoW): Integer; stdcall; external 'WS2_32.DLL' name 'GetAddrInfoW';
  17. procedure FreeAddrInfoW(ai: PaddrinfoW); stdcall; stdcall; external 'WS2_32.DLL' name 'FreeAddrInfoW';
  18. procedure GetIPList(List: TStrings);
  19. var
  20. Buffer: array[0..63] of AnsiChar;
  21. Hostname: string;
  22. Hints: TAddrInfoW;
  23. LAddrInfo: pAddrInfoW;
  24. RetVal: Integer;
  25. GInitData: TWSADATA;
  26. begin
  27. WSAStartup($101, GInitData);
  28. GetHostName(Buffer, SizeOf(Buffer));
  29. Hostname := string(Buffer);
  30. ZeroMemory(@Hints, SizeOf(TAddrInfoW));
  31. Hints.ai_family := 2{AF_INET};
  32. Hints.ai_socktype := 1{SOCK_STREAM};
  33. LAddrInfo := nil;
  34. RetVal := GetAddrInfoW(PChar(Hostname), nil, @Hints, @LAddrInfo);
  35. try
  36. if (RetVal = 0) and (LAddrInfo <> nil) then
  37. repeat
  38. with TInAddr(LAddrInfo^.ai_addr^.sin_addr).S_un_b do
  39. List.Add(Format('%d.%d.%d.%d', [Byte(s_b1), Byte(s_b2), Byte(s_b3), Byte(s_b4)]));
  40. LAddrInfo := LAddrInfo^.ai_next;
  41. until LAddrInfo = nil;
  42. finally
  43. FreeAddrInfoW(LAddrInfo);
  44. WSACleanup;
  45. end;
  46. end;

PS:我用D2009,用低版本D的朋友麻烦自己改改了。

http://blog.csdn.net/nhconch/article/details/4897682

刚写好的读取多网卡IP地址的函数的更多相关文章

  1. linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

    linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...

  2. Lodop获取客户端主网卡ip地址是0.0.0.0

    LODOP技术手册的GET_SYSTEM_INFO篇,LODOP可以用语句获取到客户端很多信息,NetworkAdapter.1.IPAddress是主网卡IP地址,通常情况下是没问题的,不过如果当前 ...

  3. 从ip addr add和ifconfig的区别看linux网卡ip地址的结构

    今天一个老外在邮件列表上问了一个问题,就是ip addr add和ifconfig的区别,我给他进行了解答,可能因为英语不好吧,解答的很简单,因此我还是要在这里详细说明一下.其实它们之间没有什么区别, ...

  4. vc根据域名获取IP地址 gethostbyname()函数

    以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数                int WSAStartup                       (         ...

  5. 【网络编程一】主机字节序与网络字节序以及ip地址转换函数

    在计算机设计之初,对内存中数据的处理也有不同的方式,(低位数据存储在低位地址处或者高位数据存储在低位地址处),然而,在通信的过程中(ISO/OSI模型和TCP/IP四层模型中),数据被一步步封装(然后 ...

  6. php读取qqwry.dat ip地址定位文件的类

    <?php// +----------------------------------------------------------------------// |// +---------- ...

  7. WMI设置有线网卡IP地址

    一.通过WMI获取物理适配器序号 NetEnabled: 是否启用了适配器,True为启用,False为禁用;PhysicalAdapter: 适配器是否物理或逻辑适配器,True为物理,False为 ...

  8. AIX使用命令修改网卡IP地址,永久生效

    比如修改en0的ip地址.chdev -l en0 -a netaddr=192.168.1.100 -a netmask=255.255.255.0 -a state=up 启用en0 网卡ifco ...

  9. 068_不登陆虚拟机,修改虚拟机网卡 IP 地址

    #!/bin/bash #该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs-tools-c 可以获得 guestmount 工具#脚本在不登陆虚拟机的情况下,修 ...

随机推荐

  1. ZOJ 2852 Deck of Cards DP

    题意: 一一个21点游戏. 1. 有三个牌堆,分别为1X,2X,3X. 2. 纸牌A的值为1,纸牌2-9的值与牌面面相同,10(T).J.Q.K的值为10,而而joke(F)的值为 任意大大. 3. ...

  2. DFS 练习 (这篇真的是随笔)

    目的: 输入: 3 输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 代码如下: #include<stdio.h> ],b[],n; void dfs(in ...

  3. 转:Javascript继承机制的设计思想

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  4. 什么是TimeTunnel

    index - Taocode 欢迎使用TimeTunnel PageOutline(1-3,,inline) 什么是TimeTunnel !TimeTunnel(简称TT)是一个基于thrift通讯 ...

  5. 编程算法 - 扑克牌的顺子 代码(C)

    扑克牌的顺子 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 从扑克牌中随机抽取5张牌, 推断是不是一个顺子, 即这5张牌是不是连续的. 2~1 ...

  6. Linux命令: chown

    touch auth.log root@ubuntu:/work# ls -l auth.log -rw-r--r-- 1 root root 0 Feb 18 19:27 auth.log chow ...

  7. 一天一个类,一点也不累 之 LinkedList

    我们的口号是,一天一个类,一点也不累 .. 今天要讲的是---LinkedList 首先,还是看看他的组织结构 Class LinkedList<E> java.lang.Object j ...

  8. 知识点1-1:什么是ASP.NET MVC

    ASP.NET MVC是微软.NET平台上的一个Web开发框架,它为开发者提供了一种构建结构良好的Web应用程序的方式.自2007年首次公布预览以来,作为Web Form的替代品,ASP.NET MV ...

  9. list和用vector区别(Vector相当于是数组,读写快,插入慢)

    stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由 ...

  10. Android 设备管理器 阻止用户取消激活

    该方案测试可行,系统版本4.4.2.它算是借助android系统的一个bug,不确定在后续更高的版本中是否修复. 该功能和360防卸载功能一样的实现原理. 主要的参考资料是:http://bbs.pe ...