'Linux API/network'에 해당되는 글 32건

  1. 2009.06.05 SIOCGIF가 모야?
  2. 2009.06.04 C언어로 MAC 어드레스 받아오기 (Linux) (1)
Linux API/network2009. 6. 5. 09:47
netdevice 의 ioctl mark들의 이름을 보니

SIOCGIFNAME
SIOCGIFINDEX
SIOCGIFFLAGS, SIOCSIFFLAGS
SIOCGIFMETRIC, SIOCSIFMETRIC
SIOCGIFMTU, SIOCSIFMTU
SIOCGIFHWADDR, SIOCSIFHWADDR
SIOCSIFHWBROADCAST
SIOCGIFMAP, SIOCSIFMAP
SIOCADDMULTI, SIOCDELMULTI
SIOCGIFTXQLEN, SIOCSIFTXQLEN
SIOCSIFNAME
SIOCGIFCONF

SIOCGIF로 시작을 한다. 무슨 의미인가 곰곰히 생각해봤더니 IF는 GIF가 아니라 InterFace인거 같긴한데..
아무튼 검색을 해보니

Socket IO Config Interface 랜다

[링크 : http://www.acronymfinder.com/Socket-IO-Config-Interface-(SIOCGIF).html]



사족 : 개인적으로는 Socket Input Output(=IO) Computer Generic InterFace가 아닐까 생각을 -ㅁ-

'Linux API > network' 카테고리의 다른 글

gateway 정보  (0) 2009.06.05
linux에서 ip/mac address 받아오기 관련 링크  (0) 2009.06.05
network 관련 include 할 파일 목록  (0) 2009.06.05
offsetof() - stddef.h  (0) 2009.06.05
SIOCGIF가 모야?  (0) 2009.06.05
C언어로 MAC 어드레스 받아오기 (Linux)  (1) 2009.06.04
Posted by 구차니
TAG SIOCGIF

댓글을 달아 주세요

Linux API/network2009. 6. 4. 18:31
#include "stdio.h"
#include "string.h"
#include "net/if.h"
#include "sys/ioctl.h"

//
// Global public data
//
unsigned char cMacAddr[8]; // Server's MAC address

static int GetSvrMacAddress( char *pIface )
{
int nSD; // Socket descriptor
struct ifreq sIfReq; // Interface request
struct if_nameindex *pIfList; // Ptr to interface name index
struct if_nameindex *pListSave; // Ptr to interface name index

//
// Initialize this function
//
pIfList = (struct if_nameindex *)NULL;
pListSave = (struct if_nameindex *)NULL;
#ifndef SIOCGIFADDR
// The kernel does not support the required ioctls
return( 0 );
#endif

//
// Create a socket that we can use for all of our ioctls
//
nSD = socket( PF_INET, SOCK_STREAM, 0 );
if ( nSD < 0 )
{
// Socket creation failed, this is a fatal error
printf( "File %s: line %d: Socket failed\n", __FILE__, __LINE__ );
return( 0 );
}

//
// Obtain a list of dynamically allocated structures
//
pIfList = pListSave = if_nameindex();

//
// Walk thru the array returned and query for each interface's
// address
//
for ( pIfList; *(char *)pIfList != 0; pIfList++ )
{
//
// Determine if we are processing the interface that we
// are interested in
//
if ( strcmp(pIfList->if_name, pIface) )
// Nope, check the next one in the list
continue;
strncpy( sIfReq.ifr_name, pIfList->if_name, IF_NAMESIZE );

//
// Get the MAC address for this interface
//
if ( ioctl(nSD, SIOCGIFHWADDR, &sIfReq) != 0 )
{
// We failed to get the MAC address for the interface
printf( "File %s: line %d: Ioctl failed\n", __FILE__, __LINE__ );
return( 0 );
}
memmove( (void *)&cMacAddr[0], (void *)&sIfReq.ifr_ifru.ifru_hwaddr.sa_data[0], 6 );
break;
}

//
// Clean up things and return
//
if_freenameindex( pListSave );
close( nSD );
return( 1 );
}

int main( int argc, char * argv[] )
{
//
// Initialize this program
//
bzero( (void *)&cMacAddr[0], sizeof(cMacAddr) );
if ( !GetSvrMacAddress("eth0") )
{
// We failed to get the local host's MAC address
printf( "Fatal error: Failed to get local host's MAC address\n" );
}
printf( "HWaddr %02X:%02X:%02X:%02X:%02X:%02X\n",
cMacAddr[0], cMacAddr[1], cMacAddr[2],
cMacAddr[3], cMacAddr[4], cMacAddr[5] );

//
// And exit
//
exit( 0 );
}
[링크 : http://www.linuxquestions.org/questions/programming-9/getting-mac-address-with-c-linux-325037/]

위의 소스 작동하는 것 확인함.
아무튼, struct ifreq 에 ioctl함수로 받아오는 식으로 구현되어 있음.

man 7 netdevice
struct ifreq {
       char ifr_name[IFNAMSIZ]; /* Interface name */
       union {
           struct sockaddr ifr_addr;
           struct sockaddr ifr_dstaddr;
           struct sockaddr ifr_broadaddr;
           struct sockaddr ifr_netmask;
           struct sockaddr ifr_hwaddr;
           short           ifr_flags;
           int           ifr_ifindex;
           int           ifr_metric;
           int           ifr_mtu;
           struct ifmap    ifr_map;
           char           ifr_slave[IFNAMSIZ];
           char           ifr_newname[IFNAMSIZ];
           char *           ifr_data;
       };
       };

[링크 : http://unixhelp.ed.ac.uk/CGI/man-cgi?netdevice+7]

$ vi /usr/inclue/bits/socket.h
161 /* Structure describing a generic socket address.  */
162 struct sockaddr
163   {
164     __SOCKADDR_COMMON (sa_);    /* Common data: address family and length.  */
165     char sa_data[14];           /* Address data.  */
166   };

[링크 : http://adywicaksono.wordpress.com/2007/11/08/detecting-mac-address-using-c-application/]
[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code/C/ifinfo]

'Linux API > network' 카테고리의 다른 글

gateway 정보  (0) 2009.06.05
linux에서 ip/mac address 받아오기 관련 링크  (0) 2009.06.05
network 관련 include 할 파일 목록  (0) 2009.06.05
offsetof() - stddef.h  (0) 2009.06.05
SIOCGIF가 모야?  (0) 2009.06.05
C언어로 MAC 어드레스 받아오기 (Linux)  (1) 2009.06.04
Posted by 구차니

댓글을 달아 주세요

  1. 이자료도 잘보고 가요 선배님~~

    2012.11.30 17:21 [ ADDR : EDIT/ DEL : REPLY ]