[Linux] Re : "sockaddr" structı kullanımı

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Halil Demirezen (halil@bilmuh.ege.edu.tr)
Date: Fri 26 Jul 2002 - 12:09:52 EEST


netmask olsun, ip addres olsun veya Mac adres olsun hatta net device ile
ilgili diger islemleri ioctl call ile halledebilirsin. Bir ifreq structure
na ihtiyacin var..

struct ifreq ifr;
int ip_addr;
int netmask_addr;
unsigned char Mac_addr[6];
char interface[6];
int sock;
struct in_addr inayapisi;

if((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP))) < 0){
  printf("error ....");
  ..
  ..
  return -1; /* örnek return */
}

  memset(&ifr, 0, sizeof(ifr));
  memset(interface, 0, sizeof(interface));
  memcpy(interface, "eth0", 4); /* device farkli ise degistir */
  strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
 

  /*simdi interface ismi interface request yapisinin icine atildi*/
  /* simdi actigimiz socket uzerinde ioctl islemi yapip
   * mac addr, ip adresi, ve netmask adresi ioctl ile alacagiz
  */

 if(ioctl(sock, SIOCGIFADDR, &ifr) < 0){
   ..ekrana hata felan yaz...
   ..ister programdan cik ister call yap...
  ..
}
 
/*eger hata yoksa ip adresimiz ifr.ifr_addr.sa_data icindedir*/

memcpy((char *)&ip_addr, ifr.ifr_addr.sa_data + 2, 4);
 
/* + 2 yi unutmayin */
 

inayapsi.s_addr = ip_addr;

/*eger ekrana yazdirma gibi bir kayginiz varsa*/
 
fprintf(stdout, " ip adresimiz: %s\n", inet_ntoa(inayapisi));

/*simdi hardware adresini alalim ioctl ile */
  
 
if(ioctl(sock, SIOCGIFHWADDR, &ifr) < 0){
  ..hata mata..
  .. etc etc...
}

memcpy(Mac_addr, ifr.ifr_hwaddr.sa_data, 6);

/*simdi Hardware adresimizi Mac_addr nin icinde*/
/*eger ekranayazdirmak istiyorsan*/

fprintf(stdout, "%02X:%02X:%02X:%02X:%02X:%02X\n",
     Mac_addr[0], Mac_addr[1], Mac_addr[2], Mac_addr[3],
     Mac_addr[4], Mac_addr[5]);

/*eger teker teker char basmak zor geliyorsa ki oyle o zaman
 * bir fonksiyon yazabilirsin */

/* sira simdi senin istedigin netmask a geldi*/

if(ioctl(sock, SIOCGIFNETMASK, &ifr) < 0){
  .. rutin hatalar...
  ..
  ..
}

memcpy((char *)&netmask_addr, ifr.ifr_addr.sa_data +2, 4);
inayapisi.s_addr = nemask_addr;

/*yazdirmak icin de*/

fprintf(stdout, "Netmask imiz : %s\n", inet_ntoa(inayapisi));

....
...
..
.

böylelikle net device ile ilgili 3 ozelligimiz elde edebiliyoruz.
device ile ilgili tum islemleri, örnegin eth0 in promiscous mode ya da
allmulti mode gecirme islemleri MTU unu elde edilmesi gibi ioctl de kullanabilecegin flaglar /usr/include/bits/ioctls.h header icinde bulunmaktadir.

saygilar

--------------------------------------------------------------------------
2002 Jul 26 - 07:31
funky <azimlinux@yahoo.com>
--------------------------------------------------------------------------

Merhaba,

Sistem fonksiyonlarıyla ethernet kartının hostname,ip,
netmask ve route tanımlarını yapmak istiyorum.
Hostname 'i almak sadece gethost...() tarzı bir
fonksiyon , ip'yi ise "sockaddr_in" i kullanarak ve
bunu "inet_toa" fonksiyonuna sokarak yaptım ,
bulamadıgım "netmask" tanımını nereden yapabilecegim.
sockaddr struct'ını bilen birisi varsa yardımcı
olabilir mi?

Bir de gateway , dns gibi tanımları alabilecegim
sistem fonksiyonları var mı? yoksa dosyalardan mı
almam gerekiyor?

tesekkurler

funky

>---------------------------------------
This message was sent by Postaci Webmail. See www.trlinux.com for details.
-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.