📄 iflook.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 + -