Giriş
ioctl ile sistem hakkında bir çok bilgi almak mümkün. Kullandığım bazı şeyleri not etmek istedim.
Ağ ve Arayüz Bilgileri
1. SIOCGIFINDEX seçeneği
Verilen ethernet isminin kaçıncı arayüz numarasına denk geldiğini bulmayı sağlar. Bu numarayı kullanarak o ara yüzden raw ethernet paketi gönderebiliriz.
2. SIOCGIFCONF seçeneği
Tüm ağ arayüzlerinin listesini alır.
3. SIOCGIFHWADDR seçeneği
Verilen ethernet isminin MAC adresini alır. Şöyle yaparız.
4. SIOCGIFADDR seçeneği
Verilen ethernet isminin IP adresini alır.
Tüm ethernet kartlarının IP adresini almak için Java'da aşağıdaki kod çalıştırılır.
Verilen ethernet isminin MAC adresini alır ARP tablosundan alır. Örnek:
TCP/UDP Bilgileri
1. SIOCOUTQ (TIOCOUTQ)
Örnek ver
2. SIOCINQ (FIONREAD)
Bu ikisi ile TCP input/output kuyruğ hakkında bilgi almak mümkün. Daha detaylı bilgi için TCP/UDP ve Linux başlıklı yazıya göz atabilirsiniz.
ioctl ile sistem hakkında bir çok bilgi almak mümkün. Kullandığım bazı şeyleri not etmek istedim.
Ağ ve Arayüz Bilgileri
Verilen ethernet isminin kaçıncı arayüz numarasına denk geldiğini bulmayı sağlar. Bu numarayı kullanarak o ara yüzden raw ethernet paketi gönderebiliriz.
2. SIOCGIFCONF seçeneği
Tüm ağ arayüzlerinin listesini alır.
3. SIOCGIFHWADDR seçeneği
Verilen ethernet isminin MAC adresini alır. Şöyle yaparız.
int fd =socket(AF_INET, SOCK_DGRAM, 0);
struct ifreq ifr;
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name , "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);
unsigned char *mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
//display mac address
printf("Mac : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n" ,
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
4. SIOCGIFADDR seçeneği
Verilen ethernet isminin IP adresini alır.
String hostName = InetAddress.getLocalHost().getHostName();Bir diğer yöntem ise
InetAddress addrs[] = InetAddress.getAllByName(hostName);
for (InetAddress addr : addrs) {
System.out.println("addr.getHostAddress() = " + addr.getHostAddress());//10.126.102.63
}
InetAddress addrs = InetAddress.getLocalHost();5. SIOCGARP seçeneği
System.out.println("Current IP address : " + addrs.getHostAddress());
Verilen ethernet isminin MAC adresini alır ARP tablosundan alır. Örnek:
//read an entry from the ARP cache of the local machine.
static char *ethernet_mactoa(struct sockaddr *addr)
{
static char buff[256];
unsigned char *ptr = (unsigned char *) addr->sa_data;
sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X",ptr[0],ptr[1],ptr[2],ptr[3],ptr[4],ptr[5]);
return (buff);
}
//Get a socket
int s = socket(AF_INET, SOCK_DGRAM, 0);
struct arpreq areq;
memset(&areq, 0, sizeof(areq));
struct sockaddr_in *sin = (struct sockaddr_in *) &areq.arp_pa;
sin->sin_family = AF_INET;
sin->sin_addr = inet_addr("192.168.2.1");
ioctl(s, SIOCGARP, &areq);
ethernet_mactoa(&areq.arp_ha);
TCP/UDP Bilgileri
1. SIOCOUTQ (TIOCOUTQ)
Örnek ver
2. SIOCINQ (FIONREAD)
Bu ikisi ile TCP input/output kuyruğ hakkında bilgi almak mümkün. Daha detaylı bilgi için TCP/UDP ve Linux başlıklı yazıya göz atabilirsiniz.
Hiç yorum yok:
Yorum Gönder