Lazarus:如何列出系统上所有可用的网络连接?

N

我正在使用Lazarus IDE在Linux系统上编写程序。该程序应该连接到Internet或Intranet。因此,我想向用户显示所有可用的网络连接列表,他们可以使用它们连接到wifi等Internet或Intranet,如果系统上有两个活动的网卡,则此程序应显示其可用的连接。

目前,我不知道从哪里开始或要使用什么工具。

任何提示,线索或建议将不胜感激。

罗道克

您可以使用ifconfig列出所有可用的网络接口及其状态。

编辑:要以编程方式执行此操作,必须将函数ioctl与SIOCGIFCONF一起使用。

#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <arpa/inet.h>

int main()
{
    int     sockfd, len, lastlen;
    char    *ptr, *buf;
    struct ifconf ifc;
    struct ifreq *ifr;
    char ifname[IFNAMSIZ + 1];
    char str[INET6_ADDRSTRLEN];

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    lastlen = 0;
    len = 100 * sizeof(struct ifreq);     /* initial buffer size guess */
    for ( ; ; )
    {
        buf = malloc(len);
        ifc.ifc_len = len;
        ifc.ifc_buf = buf;
        if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0)
        {
            if (errno != EINVAL || lastlen != 0)
                exit(-1);
        }
        else
        {
            if (ifc.ifc_len == lastlen)
                break;          /* success, len has not changed */
            lastlen = ifc.ifc_len;
        }

        len += 10 * sizeof(struct ifreq);     /* increment */
        free(buf);
    }

    printf("LEN: %d\n", ifc.ifc_len);

    for (ptr = buf; ptr < buf + ifc.ifc_len; )
    {
        ifr = (struct ifreq *) ptr;

        ptr += sizeof(struct ifreq); /* for next one in buffer */

        memcpy(ifname, ifr->ifr_name, IFNAMSIZ);

        printf("Interface name: %s\n", ifname);

        const char *res;

        switch (ifr->ifr_addr.sa_family)
        {
            case AF_INET6:
                res = inet_ntop(ifr->ifr_addr.sa_family, &(((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr), str, INET6_ADDRSTRLEN);
                break;
            case AF_INET:
                res = inet_ntop(ifr->ifr_addr.sa_family, &(((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr), str, INET_ADDRSTRLEN);
                break;
            default:
                printf("OTHER\n");
                str[0] = 0;
                res = 0;
        }

        if (res != 0)
        {
            printf("IP Address: %s\n", str);
        }
        else
        {
            printf("ERROR\n");
        }
    }

    return 0;
}

如果成功,ioctl SIOCGIFCONF将返回结构ifconf,该结构具有指向结构ifreq数组的指针。这些结构在net / if.h中定义

使用此代码,您可以从ifc.ifc_req获取所有接口,请查看struct ifreq的声明,以确定每个数组元素的长度和类型。我认为从这里您可以独自继续,如果不能,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何禁用Docker内部的所有网络连接?

来自分类Dev

关闭所有基础网络连接

来自分类Dev

列出所有网络连接,然后管理一个

来自分类Dev

如何使用c#列出网络上连接的所有打印机?

来自分类Dev

如何列出传入网络连接的用户

来自分类Dev

如何使用带有共享指针的 Boost Asio 解决“本地系统中止网络连接”?

来自分类Dev

如何重设与网络连接有关的所有内容?

来自分类Dev

如何重设与网络连接有关的所有内容?

来自分类Dev

如果Smartface.io中的网络连接丢失,如何停止所有进程

来自分类Dev

如何让所有网络连接类型HTTP和HTTPS在安卓(9)派?

来自分类Dev

如果Smartface.io中的网络连接丢失,如何停止所有进程

来自分类Dev

如何通过PowerShell列出系统上的所有组?

来自分类Dev

连续检查网络连接是否可用

来自分类Dev

如何显示系统上所有可用的unix命令?

来自分类Dev

如何在Windows 8上更改网络连接类型

来自分类Dev

如何在Linux Mint上禁用网络连接检查?

来自分类Dev

列出网络中所有可用的服务器

来自分类Dev

仅列出所有可用网络接口的设备名称

来自分类Dev

如何从Linux操作系统列出Windows操作系统分区上的所有文件?

来自分类Dev

网络连接可用时如何启动我的应用程序?

来自分类Dev

linux:如何查看系统上所有可用磁盘的所有UUID?

来自分类Dev

在Android上检测不良的网络连接

来自分类Dev

在Android上检测不良的网络连接

来自分类Dev

在iPhone上查看最近的网络连接

来自分类Dev

在Phonegap上检查网络连接

来自分类Dev

如何最好通过终端列出连接的网络中的所有IP?

来自分类Dev

如何列出系统上可用的target_link_libraries?

来自分类Dev

没有网络连接的AdMob

来自分类Dev

恢复有线网络连接

Related 相关文章

  1. 1

    如何禁用Docker内部的所有网络连接?

  2. 2

    关闭所有基础网络连接

  3. 3

    列出所有网络连接,然后管理一个

  4. 4

    如何使用c#列出网络上连接的所有打印机?

  5. 5

    如何列出传入网络连接的用户

  6. 6

    如何使用带有共享指针的 Boost Asio 解决“本地系统中止网络连接”?

  7. 7

    如何重设与网络连接有关的所有内容?

  8. 8

    如何重设与网络连接有关的所有内容?

  9. 9

    如果Smartface.io中的网络连接丢失,如何停止所有进程

  10. 10

    如何让所有网络连接类型HTTP和HTTPS在安卓(9)派?

  11. 11

    如果Smartface.io中的网络连接丢失,如何停止所有进程

  12. 12

    如何通过PowerShell列出系统上的所有组?

  13. 13

    连续检查网络连接是否可用

  14. 14

    如何显示系统上所有可用的unix命令?

  15. 15

    如何在Windows 8上更改网络连接类型

  16. 16

    如何在Linux Mint上禁用网络连接检查?

  17. 17

    列出网络中所有可用的服务器

  18. 18

    仅列出所有可用网络接口的设备名称

  19. 19

    如何从Linux操作系统列出Windows操作系统分区上的所有文件?

  20. 20

    网络连接可用时如何启动我的应用程序?

  21. 21

    linux:如何查看系统上所有可用磁盘的所有UUID?

  22. 22

    在Android上检测不良的网络连接

  23. 23

    在Android上检测不良的网络连接

  24. 24

    在iPhone上查看最近的网络连接

  25. 25

    在Phonegap上检查网络连接

  26. 26

    如何最好通过终端列出连接的网络中的所有IP?

  27. 27

    如何列出系统上可用的target_link_libraries?

  28. 28

    没有网络连接的AdMob

  29. 29

    恢复有线网络连接

热门标签

归档