虽然现在一机多网卡已经很普遍(像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. Eclipse开启与关闭代码自动提示功能

        Eclipse代码里面的代码提示功能默认是关闭的,只有输入“.”的时候才会提示功能,用vs的用户可能不太习惯 这种,vs是输入任何字母都会提示,下面说一下如何修改eclipse配置,开启代码自 ...

  2. iOS开发笔记--使用blend改变图片颜色

    最近对Core Animation和Core Graphics的内容东西比较感兴趣,自己之前也在这块相对薄弱,趁此机会也想补习一下这块的内容,所以之后几篇可能都会是对CA和CG学习的记录的文章. 在应 ...

  3. Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)

    最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass.在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemo ...

  4. 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

      设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...

  5. 一起学习CMake – 02

    本节介绍如何用CMake来设置软件的版本号 在<一起学习CMake - 01>中我们看到了如何用CMakeLists.txt来构建一个最简单的工程,这一节里我们一起来看看如何用CMake对 ...

  6. mongodb进阶一之高级查询

    上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶-- ...

  7. 交换机Trunk端口配置

    本文为转发,简单明了,我喜欢. Trunk端口的配置步骤如下: 一 组网需求: 1.SwitchA与SwitchB用trunk互连,相同VLAN的PC之间可以互访,不同VLAN的PC之间禁止互访: 2 ...

  8. Office 2010 垃圾邮件过滤设置

    垃圾邮件过滤设置 有同事反馈给我,某些时候应该收到的邮件,却到了垃圾邮件里,给工作带来了不便,下面简单介绍一下outlook 2010 有关垃圾邮件的过滤设置. 1: 找到相关的邮件,点右键,在”垃圾 ...

  9. JSP中使用cookie存储中文

    今天看J2EE的时候,看见书上讲到使用cookie保存信息的时,看到书上举得例子都是英文的键值对,我就想中文是不是一样呢?试了一下果然不一样.废话不多说,直接上代码: 比如说有addCookie.js ...

  10. listview滑动

    单击其中的一个item时,让这个item能滚动的listview的顶部.现在用 list.scrollTo(0, item.getTop()); 实现啦 android listview滚动到顶部 转 ...