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

📄 iflook.c

📁 LINUX网络代码详解,好东西!不能错过哟!
💻 C
字号:
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <sys/socket.h>
#include <netinet/if_ether.h>
#include <netinet/in.h>

char *IpToStr(unsigned long ulIp, char *szStr)
{
	char Temp[4];

	//ulIp = ntohl(ulIp);
	memcpy(Temp,&ulIp,4);
	sprintf(szStr,"%d.%d.%d.%d",(unsigned char)Temp[0], 
								(unsigned char)Temp[1],
								(unsigned char)Temp[2],
								(unsigned char)Temp[3]);
	return szStr;
}
int main(int argc ,char *argv[])
{
	unsigned short usIf;
	int from = 0,to = 512,iTotal= 0;
	struct ifreq stReq;
	int fd = -1;
	char szIp[32],szMac[32];
	struct sockaddr_in *pstAddr;

	if(argc >= 3){ 
		from = atoi(argv[1]) -1;
		to = atoi(argv[2]);
	}
	fd = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
	while( ++from <= to){
		memset(&stReq,0,sizeof(struct ifreq));
		sprintf(stReq.ifr_name,"eth%d",from);
		ioctl(fd,SIOCGIFADDR,&stReq, sizeof(struct ifreq));
		pstAddr = (struct sockaddr_in *)&(stReq.ifr_addr);
		printf("eth%d, ip=%s\n",from,IpToStr(pstAddr->sin_addr.s_addr,szIp));
		if(pstAddr->sin_addr.s_addr > 0) {
			iTotal ++;
		}
	}
	printf("Total not empty IP=%d\n",iTotal);
	close(fd);
}

⌨️ 快捷键说明

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