minzkn
°¡ÀÔ: 2003³â 9¿ù 16ÀÏ ¿Ã¸° ±Û: 1 À§Ä¡: ¾î?
|
¿Ã·ÁÁü: 2003.9.16 È, 5:42 am ÁÖÁ¦: ¿ÜºÎ·Î Åë½Å°¡´ÉÇÑ IP¾Ë¾Æ³»±â. |
|
|
ÇÑÀÚ Àû¾îº¾´Ï´Ù.
À½ ÀÌ°ÍÀÌ ¹«¾ùÀÎ°í ¼³¸íÇÏÀÚ¸é
¿ì¸® º¸Åë Network card°¡ 1°³¸¦ ¾²Áö¿ä?
±×·±µ¥ ¾È±×·¯½ÅºÐµµ ¸¹À»°Ì´Ï´Ù.
¿©·¯°³ÀÇ IP»ç¿ëÇϽǶ§
¾î¶²°Ô ÁøÂ¥·Î ¿ÜºÎ·Î ³ª°¡´Â IPÀÎÁö °ËÃâÇغ¼ ÇÊ¿ä°¡ ÀÖÁÒ?
±×·±¶§ ¾ø¾ú³ª¿ä?
ÀÌ°Ç ±×¶§ ¿ÜºÎ·Î ³ª°¥¼ö ÀÖ´Â IP¸¦ °ËÃâÇϴ°̴ϴÙ.
¹°·Ð ÀÌ°ÍÀ» 100% ½Å·ÚÇÒ¼ö´Â ¾ø°í
±×·¸°Ô ½Å·Ú¸¦ Çϱâ À§Çؼ´Â ICMP°¡ ±¸ÇöµÇ¾î¾ß ÇÕ´Ï´Ù.
¶ÇÇÑ Gateway°¡ ÇÑ°³°¡ ¾Æ´Ò¼öµµ ÀÖ´Ù´Â Á¡µµ °í·Á»çÇ×ÀÌ µÇ°í¿ä.
eth0:0 eth0:1 µîÀÇ °æ¿ìµµ »ý°¢ÇغÁ¾ß Çϸç
ifr·Î´Â °ËÃâÀÌ ¾ÈµÇ´Â °æ¿ì¿¡ ´ëÇؼ´Â /procÀ¸·Î º¸Á¤ÇÒ ÇÊ¿äµµ ÀÖ°í¿ä.
ÇÏÁö¸¸ °£·«ÇÏ°Ô³ª¸¶ ÀÌ·¸°Ô Çѹø ¸¸µé¾î ºÃ½À´Ï´Ù.
º»·¡´Â º¸°ÇؾßÇÒ°÷ÀÌ Çѵαºµ¥°¡ ¾Æ´Ï¶ó´Â Á¡Àº
¾ËÁö¸¸ ±×³É ¿ø¸®±¸ÇöÀÌ´Ï±î µµ¿òÀÌ µÉ±îÇؼ
¸¸µé¾îº¾´Ï´Ù.
ÄÚµå: |
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <netinet/if_ether.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <fcntl.h>
int main(int s_Argc, char **s_Argv);
int main(int s_Argc, char **s_Argv)
{
const char *c_Proc_Route = "/proc/net/route";
int s_SocketHandle, s_Handle, s_ReadBytes, s_RequestCount = 10;
struct ifconf s_ifconfig;
struct ifreq *s_ifrequest;
struct sockaddr_in *s_SockAddr_In;
char *s_MyDevice;
char *s_MyIP, *s_MyBroadcastIP, *s_MyNetmaskIP, *s_RouteIP, *s_RouteName;
char s_Buffer[ 32 << 10 ];
s_RouteIP = s_RouteName = (char *)0;
s_Handle = open(c_Proc_Route, O_RDONLY);
if(s_Handle >= 0)
{
s_ReadBytes = read(s_Handle, &s_Buffer[0], sizeof(s_Buffer) - 1);
close(s_Handle);
if(s_ReadBytes > 0)
{
unsigned long s_Destination, s_Gateway, s_Flags, s_RefCnt, s_Use, s_Metric, s_Mask;
char *s_TraceBuffer;
int s_Index;
s_Buffer[ s_ReadBytes ] = '\0';
s_Index = 0;
s_TraceBuffer = (char *)(&s_Buffer[s_Index]);
do
{
s_RouteName = (char *)0;
if(s_Buffer[s_Index] == '\0' || s_Buffer[s_Index] == '\n')
{
s_Buffer[s_Index] = '\0';
s_RouteName = s_TraceBuffer;
while((*s_TraceBuffer) != ' ' && (*s_TraceBuffer) != '\t' && (*s_TraceBuffer) != '\0')s_TraceBuffer++;
*(s_TraceBuffer++) = '\0';
while(((*s_TraceBuffer) == ' ' || (*s_TraceBuffer) == '\t') && (*s_TraceBuffer) != '\0')s_TraceBuffer++;
if(sscanf(s_TraceBuffer, "%lx%lx%lX%lu%lu%lu%lx", &s_Destination, &s_Gateway, &s_Flags, &s_RefCnt, &s_Use, &s_Metric, &s_Mask) == 7)
{
if(s_Destination == 0lu)
{
/* fprintf(stdout, "Default route [%s:%s]\n", s_RouteName, s_TraceBuffer); */
break;
}
/* else fprintf(stdout, "Normal route [%s:%s]\n", s_RouteName, s_TraceBuffer); */
}
/* else fprintf(stdout, "Non line [%s:%s]\n", s_RouteName, s_TraceBuffer); */
s_Index++;
s_TraceBuffer = (char *)(&s_Buffer[s_Index]);
}
else if(s_Buffer[s_Index] == '\r')s_Buffer[s_Index++] = ' ';
else s_Index++;
}while(s_Index < s_ReadBytes);
}
}
else fprintf(stderr, "Can not open \"%s\"\n", c_Proc_Route);
if(s_RouteName == (char *)0)
{
return(-1);
}
s_SocketHandle = socket(AF_INET, SOCK_DGRAM, 0);
if(s_SocketHandle >= 0)
{
memset((void *)&s_ifconfig, 0, sizeof(struct ifconf));
do
{
if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf);
s_ifconfig.ifc_len = sizeof(struct ifreq) * s_RequestCount;
s_ifconfig.ifc_buf = malloc(s_ifconfig.ifc_len);
if(s_ifconfig.ifc_buf)
{
if(ioctl(s_SocketHandle, SIOCGIFCONF, &s_ifconfig) == 0)
{
if(s_ifconfig.ifc_len < (sizeof(struct ifreq) * s_RequestCount))
{
s_ifrequest = s_ifconfig.ifc_req;
if(s_ifrequest)
{
for(s_RequestCount = 0;s_RequestCount < s_ifconfig.ifc_len;s_RequestCount += sizeof(struct ifreq), s_ifrequest++)
{
s_MyDevice = strdup(s_ifrequest->ifr_name);
ioctl(s_SocketHandle, SIOCGIFADDR, s_ifrequest);
s_SockAddr_In = (struct sockaddr_in *)(&s_ifrequest->ifr_addr);
s_MyIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr));
ioctl(s_SocketHandle, SIOCGIFBRDADDR, s_ifrequest);
s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_broadaddr;
s_MyBroadcastIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr));
ioctl(s_SocketHandle, SIOCGIFNETMASK, s_ifrequest);
s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_netmask;
s_MyNetmaskIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr));
if(strcmp(s_MyDevice, "lo") != 0 && strcmp(s_RouteName, s_MyDevice) == 0)fprintf(stdout, "%s %s\n", s_MyDevice, s_MyIP);
if(s_MyDevice )free(s_MyDevice);
if(s_MyIP )free(s_MyIP);
if(s_MyBroadcastIP)free(s_MyBroadcastIP);
if(s_MyNetmaskIP )free(s_MyNetmaskIP);
}
}
break;
}
else s_RequestCount += 10;
}
else break;
}
else break;
}while(1);
if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf);
close(s_SocketHandle);
}
else fprintf(stderr, "Can not open socket !!!\n");
return(0);
}
/* End of source */ |
_________________ <mailto:minzkn@infoeq.com>
<home: http://minzkn.wowdns.com:2744> |
|