[ Dejan Lozanovic @ 04.06.2002. 00:31 ] @
kako procitati MAC adresu sa nekog kosta ? tj ip adrese ?. pod unixom ?

[ leka @ 04.06.2002. 18:03 ] @
Evo ti kod lenjivche: :)
Code:

/**
 * 
 * input : IP addresa od interfejsa (ista mreza)
 * output : MAC addresa ovog interfejsa ako je nadjena
 *
 * Testirano na Debian-u...
 */

#include <stdlib.h>
#include <stdio.h>
#include <net/if_arp.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
  struct sockaddr_in sin = { 0 };
  struct arpreq myarp = { { 0 } };
  int sockfd;
  unsigned char *ptr;
  
  if(argc!=2) {
    printf("Kako koristiti program: %s <IP addresa>\n",argv[0]);
    exit(0);
  }

  sin.sin_family = AF_INET;
  if(inet_aton(argv[1], &sin.sin_addr)==0) {
    printf("%s: IP addresa '%s' nije validna\n",argv[0],argv[1]);
    exit(0);
  }
  
  
  memcpy(&myarp.arp_pa, &sin, sizeof myarp.arp_pa);         
  strcpy(myarp.arp_dev, "eth0");
  
  if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
    printf("%s: ne mogu da otvorim socket\n",argv[0]);
    exit(0);
  }
  
  if (ioctl(sockfd, SIOCGARP, &myarp) == -1) {
    printf("%s: nema podatka u arp_cache-u za '%s'\n",argv[0],argv[1]);
    exit(0);
  }
  
  ptr = &myarp.arp_ha.sa_data[0];
  printf("%s: MAC addresa za '%s' je : ",argv[0],argv[1]);
  printf("%x:%x:%x:%x:%x:%x\n",*ptr, *(ptr+1),*(ptr+2),
     *(ptr+3),*(ptr+4),*(ptr+5));
  
  return 1;
}

[ Dragi Tata @ 04.06.2002. 18:17 ] @
Bravo Leko!

A ako nekog interesuje kako isto to uraditi pod Windows-om, pogledajte

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q118623
[ Reljam @ 04.06.2002. 18:29 ] @
Velika je razlika! Windows (tacnije MS TCP/IP stack koji se dobija uz Windows) ne podrzava 'prave' raw sockete (sto se vidi ako se *vrlo* pazljivo procita knowledge base). Konkretno: ne mozes da dobijes ili saljes ethernet header (a to je kako radi taj sors za linux), a ako napises custom IP header nemas potpunu slobodu - TCP/IP stack moze da ga dropuje ukoliko mu se neke stvari ne svide (recimo source IP != local source IP, ili checksum ne valja).
Na svu srecu na netu ima drugih TCP/IP stackova koji i ovo podrzavaju.
[ leka @ 04.06.2002. 20:26 ] @
To je logicno s obzirom da su socket-i na Windows-u bili (ne znam da li su jos uvek) zestok hakerski zahvat... Neki bi to nazvali "budzavina". Ja se nadam da sada Windows u kernelu ima nekakvu podrsku za to. Ima li neko ko je vise upucen u ovo, pa da nam malo to vise objasni?
[ Reljam @ 04.06.2002. 23:59 ] @
Limitacija nije softverskog tipa: postoji svestna odluka da se full-raw stack ne daje uz Windows (sa ovom odlukom se ne slazem). Naravno da postoji filter driver koji se dobija uz Netmon (u Server editionu) koji omogucava sve ovo. Samo je pitanje sta se daje uz obicnu i pro verziju.
[ B o j a n @ 05.06.2002. 09:33 ] @
Evo slicnog koda ...
[ Dejan Lozanovic @ 06.06.2002. 16:47 ] @
Citat:
leka:
Evo ti kod lenjivche: :)


Nije to u pitanju nego nedostatak prave literature :((((((((, ovu knjigu koju ja imam i koristim obradjena je samo System V IPC, ni reci od od IP protokola i ostalih cuda :(((((, tako da sve to nekako nabadam, ko corava kokoska