get ethernet interface address
时间:2007-01-24 来源:只爱殷澍蕾
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <net/if.h>
#include <stdio.h>
void err_sys(const char *errmsg);
int main(int argc, char **argv)
{
struct ifreq ifr; /** interface structure **/
struct sockaddr_in *sin; /** IPv4 socket address structure **/
int sockfd; /** UDP socket descriptor **/
char addr[INET_ADDRSTRLEN]; /** store interface address **/
/**create UDP socket **/
if ((sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
err_sys("socket error");
/** get interface address **/
strcpy(ifr.ifr_name, "eth0"); /**ethernet interface **/
if (ioctl(sockfd, SIOCGIFADDR, &ifr) == -1)
err_sys("ioctl error");
sin = (struct sockaddr_in *) (&ifr.ifr_addr);
if (inet_ntop(AF_INET, &sin->sin_addr, addr, sizeof(addr)) == NULL)
err_sys("inet_ntop error");
else
printf("interface address: %s\n", addr);
exit(0);
}
void err_sys(const char *errmsg)
{
perror(errmsg);
exit(1);
}
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <net/if.h>
#include <stdio.h>
void err_sys(const char *errmsg);
int main(int argc, char **argv)
{
struct ifreq ifr; /** interface structure **/
struct sockaddr_in *sin; /** IPv4 socket address structure **/
int sockfd; /** UDP socket descriptor **/
char addr[INET_ADDRSTRLEN]; /** store interface address **/
/**create UDP socket **/
if ((sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
err_sys("socket error");
/** get interface address **/
strcpy(ifr.ifr_name, "eth0"); /**ethernet interface **/
if (ioctl(sockfd, SIOCGIFADDR, &ifr) == -1)
err_sys("ioctl error");
sin = (struct sockaddr_in *) (&ifr.ifr_addr);
if (inet_ntop(AF_INET, &sin->sin_addr, addr, sizeof(addr)) == NULL)
err_sys("inet_ntop error");
else
printf("interface address: %s\n", addr);
exit(0);
}
void err_sys(const char *errmsg)
{
perror(errmsg);
exit(1);
}
相关阅读 更多 +