Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <ifaddrs.h>
- #include <net/ethernet.h>
- #include <linux/if_packet.h>
- #include <stdio.h>
- void
- print_sockaddr(struct sockaddr* addr,const char *name)
- {
- char addrbuf[128] ;
- addrbuf[0] = 0;
- if(addr->sa_family == AF_UNSPEC)
- return;
- switch(addr->sa_family) {
- case AF_INET:
- inet_ntop(addr->sa_family,&((struct sockaddr_in*)addr)->sin_addr,addrbuf,sizeof(struct sockaddr_in));
- break;
- case AF_INET6:
- inet_ntop(addr->sa_family,&((struct sockaddr_in6*)addr)->sin6_addr,addrbuf,sizeof(struct sockaddr_in6));
- break;
- case AF_PACKET: {
- struct sockaddr_ll *s = (struct sockaddr_ll*)addr;
- int i;
- int len = 0;
- for(i = 0; i < 6; i++)
- len+=sprintf(addrbuf+len,"%02X%s",s->sll_addr[i],i < 5 ? ":":"");
- len+=sprintf(addrbuf+len,"\nInterface Index %d Physical layer protocol %u Header type %u Packet type %u Length of address %u",s->sll_ifindex,s->sll_protocol,s->sll_hatype, s->sll_pkttype,s->sll_halen);
- }
- break;
- default:
- sprintf(addrbuf,"Unknown (%d)",(int)addr->sa_family);
- break;
- }
- printf("%-16s %s\n",name,addrbuf);
- }
- void
- print_ifaddr(struct ifaddrs *addr)
- {
- char addrbuf[128] ;
- addrbuf[0] = 0;
- printf("%-16s %s\n","Name",addr->ifa_name);
- if(addr->ifa_addr != NULL)
- print_sockaddr(addr->ifa_addr,"Address");
- if(addr->ifa_netmask != NULL)
- print_sockaddr(addr->ifa_netmask,"Netmask");
- if(addr->ifa_broadaddr != NULL)
- print_sockaddr(addr->ifa_broadaddr,"Broadcast addr.");
- if(addr->ifa_dstaddr != NULL)
- print_sockaddr(addr->ifa_dstaddr,"Peer addr.");
- puts("");
- }
- int main(int argc,char *argv[])
- {
- struct ifaddrs *addrs,*tmp;
- if(getifaddrs(&addrs) != 0) {
- perror("getifaddrs");
- return 1;
- }
- for(tmp = addrs; tmp ; tmp = tmp->ifa_next) {
- print_ifaddr(tmp);
- }
- freeifaddrs(addrs);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement