현재 unix machine이 할당받은 ip를 어떤 변수에 입력 받아서 출력해보 려고합니다.
흔히 말하는 getip 를 하려고하는데요
어떻게 해야할까요?
꼭 답변 부탁드립니다.
허접입니다.. 적당히 고쳐서 쓰세여...
#include #include #include #include
void main() { struct ifconf ifc; struct ifreq *ifr; struct sockaddr_in *sinptr; struct in_addr in; int sockfd,len,lastlen; char *ptr,*buf,lastname[IFNAMSIZ]; unsigned char *dst_ntoa[20];
sockfd=socket(AF_INET,SOCK_DGRAM,0); lastlen=0; len=10*sizeof(struct ifreq); //100 개의 ifreq 구조를 위한 공간을 할당한다.
for (;;) { buf=malloc(len); ifc.ifc_len=len; ifc.ifc_buf=buf;
if (ioctl(sockfd,SIOCGIFCONF,&ifc)<0) { if (lastlen!=0) { printf("ioctl error\n"); exit(1); } } else { if (ifc.ifc_len==lastlen) break; lastlen=ifc.ifc_len; } len+=10*sizeof(struct ifreq); free(buf); } for (ptr=buf;ptr { ifr=(struct ifreq *)ptr; switch (ifr->ifr_addr.sa_family) { case AF_INET6 len=sizeof(struct sockaddr_in6); break; case AF_INET default len=sizeof(struct sockaddr); break; } ptr+=sizeof(ifr->ifr_name)+len;
printf("%s\t",ifr->ifr_name); sinptr=(struct sockaddr_in *)&ifr->ifr_addr; in=sinptr->sin_addr; *dst_ntoa=inet_ntoa(in); printf("%s\n",*dst_ntoa); } }
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: ip address 를 c 언어로 어떤 변수에 넣는 방법
허접입니다..
적당히 고쳐서 쓰세여...
#include
#include
#include
#include
void main()
{
struct ifconf ifc;
struct ifreq *ifr;
struct sockaddr_in *sinptr;
struct in_addr in;
int sockfd,len,lastlen;
char *ptr,*buf,lastname[IFNAMSIZ];
unsigned char *dst_ntoa[20];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
lastlen=0;
len=10*sizeof(struct ifreq); //100 개의 ifreq 구조를
위한 공간을 할당한다.
for (;;)
{
buf=malloc(len);
ifc.ifc_len=len;
ifc.ifc_buf=buf;
if (ioctl(sockfd,SIOCGIFCONF,&ifc)<0)
{
if (lastlen!=0)
{
printf("ioctl error\n");
exit(1);
}
}
else {
if (ifc.ifc_len==lastlen)
break;
lastlen=ifc.ifc_len;
}
len+=10*sizeof(struct ifreq);
free(buf);
}
for (ptr=buf;ptr {
ifr=(struct ifreq *)ptr;
switch (ifr->ifr_addr.sa_family)
{
case AF_INET6
len=sizeof(struct sockaddr_in6);
break;
case AF_INET
default
len=sizeof(struct sockaddr);
break;
}
ptr+=sizeof(ifr->ifr_name)+len;
printf("%s\t",ifr->ifr_name);
sinptr=(struct sockaddr_in *)&ifr->ifr_addr;
in=sinptr->sin_addr;
*dst_ntoa=inet_ntoa(in);
printf("%s\n",*dst_ntoa);
}
}
댓글 달기