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

📄 interface.c

📁 linux下的一个多线程扫描工具
💻 C
字号:
#include <stdio.h>#include <string.h>#include <sys/ioctl.h>#include <errno.h>#include "socket.h"#include "interface.h"extern char local_ip[20];/* display interface information */void show_interface(char *devname){        struct sockaddr_in *addr;        struct ifreq        ifr;        int                 sock_id;        sock_id = socket( AF_INET,SOCK_DGRAM,0 );        strncpy( ifr.ifr_name,devname,IFNAMSIZ );        if (ioctl( sock_id,SIOCGIFADDR,&ifr) == -1) {                perror("[-] ioctl");                exit(1);        }        addr = (struct sockaddr_in *) & ifr.ifr_addr;        if (!strcmp(devname,DEFAULT_INTERFACE))                sprintf(local_ip,"%s",inet_ntoa(addr->sin_addr));        if (ioctl( sock_id,SIOCGIFBRDADDR,&ifr) == -1) {                perror("[-] ioctl");                exit(1);        }        addr = (struct sockaddr_in *) & (ifr.ifr_broadaddr);            if (ioctl( sock_id,SIOCGIFNETMASK,&ifr) == -1) {                perror("[-] ioctl");                exit(1);        }}/* find all active interface */void find_interface(){    struct ifconf   ifc;    struct ifreq    ifr;    struct ifreq    *pifr;    int             len, lastlen;    int             i;    int             fd;    char            *buf;    fd = socket(AF_INET, SOCK_DGRAM, 0);    if (fd < 0) {        perror("[-] socket \n");        exit(1);    }    len = 10 * sizeof(struct ifreq);    while (1) {        buf = (char *)malloc(len);        ifc.ifc_len = len;        ifc.ifc_buf = buf;        if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {            if (errno != EINVAL || lastlen != 0) {                perror("ioctl \n");                free(buf);                exit(1);            }        }        else {            if (ifc.ifc_len == lastlen)                break;            lastlen = ifc.ifc_len;        }        len += 5 * sizeof(struct ifreq);        free(buf);    }    pifr = ifc.ifc_req;    for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0 ; ++pifr) {        strcpy(ifr.ifr_name, pifr->ifr_name);        if (ioctl(fd, SIOCGIFFLAGS, &ifr) == 0) {            if (!(ifr.ifr_flags & IFF_LOOPBACK))                show_interface(ifr.ifr_name);        }    }}

⌨️ 快捷键说明

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