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.
-----------------------------------------------------------------------