⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iptvipconfig.txt

📁 iptv 中IPconfig代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
读取和写入IP的代码我来提供好了。
请注意被我注释掉的define和typedef,由于只是参考,我就不给你单独能运行的了。
是参考ifconfig代码,通过ioctl来做的。

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <errno.h>
#include <features.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/route.h>
#include <stdio.h>

#include "define.h"
#include "net.h"

//#define   FAILURE   0
//#define   SUCCESS   1
//typedef unsigned char UNS8;        /* 8-bit */
//typedef unsigned short UNS16;        /* 16-bit */
//typedef unsigned int UNS32;        /* 32-bit */
//typedef unsigned long long int UNS64;        /* 64-bit */
//typedef char S8;                /* 8-bit */
//typedef short S16;                /* 16-bit */
//typedef int S32;                /* 32-bit */
//typedef long long int S64;        /* 64-bit */
//typedef enum {
//        FALSE,
//        TRUE
//} BOOL;
#define m_MSG(format, args...)  printf(format, ## args)
#define m_ERROR(terminal,format, args...)  fprintf(terminal,format, ## args)
#define m_DEBUG(format, args...)  printf(format, ## args)


S32 Setup_SetDefaultRoute(S32 fd, S8 * interface, UNS32 * route_addr)
{
        struct rtentry rtent;
        struct sockaddr_in *p;

        memset(&rtent, 0, sizeof(struct rtentry));
        p = (struct sockaddr_in *) &rtent.rt_dst;
        p->sin_family = AF_INET;
        p->sin_addr.s_addr = 0;
        p = (struct sockaddr_in *) &rtent.rt_gateway;
        p->sin_family = AF_INET;
        p->sin_addr.s_addr = *route_addr;
        p = (struct sockaddr_in *) &rtent.rt_genmask;
        p->sin_family = AF_INET;
        p->sin_addr.s_addr = 0;

        rtent.rt_dev = interface;

        rtent.rt_metric = 1;
        rtent.rt_window = 0;
        rtent.rt_flags = RTF_UP | RTF_GATEWAY;
        if (ioctl(fd, SIOCADDRT, &rtent) == -1) {
                if (errno == ENETUNREACH) {        /* possibly gateway is over the bridge */
                        /* try adding a route to gateway first */
                        memset(&rtent, 0, sizeof(struct rtentry));
                        p = (struct sockaddr_in *) &rtent.rt_dst;
                        p->sin_family = AF_INET;
                        p->sin_addr.s_addr = *route_addr;
                        p = (struct sockaddr_in *) &rtent.rt_gateway;
                        p->sin_family = AF_INET;
                        p->sin_addr.s_addr = 0;
                        p = (struct sockaddr_in *) &rtent.rt_genmask;
                        p->sin_family = AF_INET;
                        p->sin_addr.s_addr = 0xffffffff;


                        rtent.rt_dev = interface;
                        rtent.rt_metric = 0;
                        rtent.rt_flags = RTF_UP | RTF_HOST;
                        if (ioctl(fd, SIOCADDRT, &rtent) == 0) {
                                memset(&rtent, 0, sizeof(struct rtentry));
                                p = (struct sockaddr_in *) &rtent.rt_dst;
                                p->sin_family = AF_INET;
                                p->sin_addr.s_addr = 0;
                                p = (struct sockaddr_in *) &rtent.
                                    rt_gateway;
                                p->sin_family = AF_INET;
                                p->sin_addr.s_addr = *route_addr;
                                p = (struct sockaddr_in *) &rtent.
                                    rt_genmask;
                                p->sin_family = AF_INET;
                                p->sin_addr.s_addr = 0;


                                rtent.rt_dev = interface;

                                rtent.rt_metric = 1;
                                rtent.rt_window = 0;
                                rtent.rt_flags = RTF_UP | RTF_GATEWAY;
                                if (ioctl(fd, SIOCADDRT, &rtent) == -1) {
                                        m_ERROR(stderr,
                                                "ioctl SIOCADDRT: %m\n");
                                        return FAILURE;
                                }
                        }
                } else {
                        m_ERROR(stderr, "ioctl SIOCADDRT: %m\n");
                        return FAILURE;
                }
        }
        return SUCCESS;
}

//通过读取 /proc/net/route获取路由表
S32 Setup_GetRoute(FILE * fp, RT * rt)
{
        S8 devname[64];
        UNS32 d, g, m;
        S32 flgs, ref, use, metric, mtu, win, ir;
        S32 r;

        if (fp == NULL) {
                return FAILURE;
        }
        r = fscanf(fp, "%63s%x%x%X%d%d%d%x%d%d%d\n", devname, &d, &g, &flgs, &ref, &use, &metric, &m, &mtu, &win, &ir);
        if (r != 11) {
                if ((r < 0) && feof(fp)) {
                        /* EOF with no (nonspace) chars read. */
                        return FAILURE;
                }
                return FAILURE;
        }

        if (!(flgs & RTF_UP)) {
                /* Skip interfaces that are down. */
                return Setup_GetRoute(fp, rt);
        }

        rt->dst = d;
        rt->mask = m;
        rt->gw = g;
        rt->flags = flgs;

        return SUCCESS;
}

S32 Setup_ReadInterface(S8 * interface, UNS32 * ipaddr, UNS32 * netmaskaddr,
                   UNS32 * gwaddr)
{
        S32 fd;
        struct ifreq ifr;
        struct sockaddr_in *our_ip;
        RT rt;
        S32 fret;
        FILE *fp = NULL;

        *ipaddr = 0;
        *netmaskaddr = 0;
        *gwaddr = 0;
        memset(&ifr, 0, sizeof(struct ifreq));
        if ((fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) >= 0) {
                ifr.ifr_addr.sa_family = AF_INET;
                strcpy(ifr.ifr_name, interface);

                if (ipaddr) {
                        bzero(ipaddr, sizeof(UNS32));
                        if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
                                our_ip =
                                    (struct sockaddr_in *) &ifr.ifr_addr;
                                *ipaddr = our_ip->sin_addr.s_addr;
                        } else {
                                m_ERROR(stderr,
                                        "SIOCGIFADDR failed, is the interface up and configured?: %m");
                                close(fd);
                                return FAILURE;
                        }
                }
                if (netmaskaddr) {
                        bzero(netmaskaddr, sizeof(UNS32));
                        if (ioctl(fd, SIOCGIFNETMASK, &ifr) == 0) {
                                our_ip =
                                    (struct sockaddr_in *) &ifr.
                                    ifr_netmask;
                                *netmaskaddr = our_ip->sin_addr.s_addr;
                        } else {
                                m_ERROR(stderr,
                                        "SIOCGIFHWADDR failed!: %m");
                                close(fd);
                                return FAILURE;
                        }
                }
        } else {
                m_ERROR(stderr, "socket failed!: %m");
                return FAILURE;
        }
        close(fd);
        if (gwaddr) {
                bzero(gwaddr, sizeof(UNS32));
                fp = fopen("/proc/net/route", "r");
                if (fp == NULL) {
                        return FAILURE;
                } else {
                        if (fscanf(fp, "%*[^\n]\n") < 0) {        /* Skip the first line. */
                                /* Empty or missing line, or read error. */
                                return FAILURE;
                        }
                }
                while ((fret = Setup_GetRoute(fp, &rt)) == SUCCESS) {
                        if (rt.flags & RTF_GATEWAY) {
                                *gwaddr = rt.gw;
                                break;
                        }
                }
                fclose(fp);
                if (fret != SUCCESS) {
                        return FAILURE;
                }
        }

        return SUCCESS;
}

S32 Setup_WriteInterface(S8 * interface, UNS32 * ipaddr, UNS32 * netmaskaddr,
                    UNS32 * gwaddr)
{
        S32 fd;
        struct ifreq ifr;
        struct sockaddr_in *p = (struct sockaddr_in *) &(ifr.ifr_addr);

        memset(&ifr, 0, sizeof(struct ifreq));
        if (interface) {
                strcpy(ifr.ifr_name, interface);
        } else {
                return FAILURE;
        }


        if ((fd = socket(AF_INET, SOCK_STREAM, 0)) >= 0) {
                ifr.ifr_addr.sa_family = AF_INET;
                if (ipaddr) {
                        p->sin_addr.s_addr = *ipaddr;
                        if (ioctl(fd, SIOCSIFADDR, &ifr) == -1) {        /* setting IP address */
                                m_ERROR(stderr, "ioctl SIOCSIFADDR: %m\n");
                                return FAILURE;
                        }
                }
                if (netmaskaddr) {
                        p->sin_addr.s_addr = *netmaskaddr;
                        if (ioctl(fd, SIOCSIFNETMASK, &ifr) == -1) {        /* setting netmask */
                                p->sin_addr.s_addr = 0xffffffff;        /* try 255.255.255.255 */
                                if (ioctl(fd, SIOCSIFNETMASK, &ifr) == -1) {
                                        m_ERROR(stderr,
                                                "ioctl SIOCSIFNETMASK: %m\n");
                                        return FAILURE;
                                }
                        }
                }
                if (ipaddr && netmaskaddr) {
                        p->sin_addr.s_addr = *ipaddr | (~*netmaskaddr);
                        if (ioctl(fd, SIOCSIFBRDADDR, &ifr) == -1) {        /* setting broadcast address */
                                m_ERROR(stderr,
                                        "ioctl SIOCSIFBRDADDR: %m\n");
                                return FAILURE;
                        }
                }
                if (gwaddr) {
                        return Setup_SetDefaultRoute(fd, interface, gwaddr);
                }
                close(fd);
        } else {
                m_ERROR(stderr, "socket failed!: %m");
                return FAILURE;
        }

        return SUCCESS;
}

还是给你个我测试时用的可以单独运行的吧,方便你直接改了后移植。
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <errno.h>
#include <features.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/route.h>
#include <stdio.h>

#define   FAILURE   0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -