MAC adres pod LINUX
4 отговора
287 прегледа
MAC adres pod LINUX
niakoi moje li da mi kaje nachin po koito da si smenia MAC adresa pod LINUX?
t.e. da vnedria v paketite s koito komunikiram MAC adres p moe jelanie a ne tozi
koito pritejava LAN kartata i koito se postavia avtomatichno.
Blagodaria predvaritelno za mnenia i idei koito biha mi svurshili rabota.
t.e. da vnedria v paketite s koito komunikiram MAC adres p moe jelanie a ne tozi
koito pritejava LAN kartata i koito se postavia avtomatichno.
Blagodaria predvaritelno za mnenia i idei koito biha mi svurshili rabota.
Re: MAC adres pod LINUX
ifconfig eth0 hw ether 00:A0:24:A9:06:56
(виж man ifconfig )
(виж man ifconfig )
Re: MAC adres pod LINUX
За целта си отваряш сокет с протокол PF_PACKET:
s = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL)), и го използваш за да четеш и изпращаш пакетите. Трябва сам да си сглобяваш MAC/IP/... хедърите и да ги анализираш при получаване, така че има доста работа ако ще работиш с някой по-сложен протокол от високо ниво. Освен това при получаване на пакетите интерфейса по който ще пристигат трябва да е в promisc режим. Процеса, който ще отваря сокета трябва да има необходимите привилегии (CAP_NET_RAW или нещо подобно).
s = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL)), и го използваш за да четеш и изпращаш пакетите. Трябва сам да си сглобяваш MAC/IP/... хедърите и да ги анализираш при получаване, така че има доста работа ако ще работиш с някой по-сложен протокол от високо ниво. Освен това при получаване на пакетите интерфейса по който ще пристигат трябва да е в promisc режим. Процеса, който ще отваря сокета трябва да има необходимите привилегии (CAP_NET_RAW или нещо подобно).
Re: MAC adres pod LINUX
сега незнам какво точно искаш да правиш , но ако искаш само да си
промениш MAC адреса има една функция - ioctl - с нея може да стане това
например нещо подобно :
int sock;
struct ifreq ifr;
unsigned char mac[6];
sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ARP));
strcpy(ifr.ifr_name,"eth0");
ioctl(sock,SIOCGIFHWADDR,&ifr)
memcpy(mac,ifr.ifr_hwaddr.sa_data,6);
printf("My mac address: %02x:%02x:%02x:%02x:%02x:%02x \n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
/* тука променяш MACa */
ioctl(sock,SIOCSIFHWADDR,&ifr);
Естествено трябва да си root и преди това трябва да направиш
ifconfig eth0 down
промениш MAC адреса има една функция - ioctl - с нея може да стане това
например нещо подобно :
int sock;
struct ifreq ifr;
unsigned char mac[6];
sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ARP));
strcpy(ifr.ifr_name,"eth0");
ioctl(sock,SIOCGIFHWADDR,&ifr)
memcpy(mac,ifr.ifr_hwaddr.sa_data,6);
printf("My mac address: %02x:%02x:%02x:%02x:%02x:%02x \n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
/* тука променяш MACa */
ioctl(sock,SIOCSIFHWADDR,&ifr);
Естествено трябва да си root и преди това трябва да направиш
ifconfig eth0 down