Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Developpement Raw Socket

3 réponses
Avatar
nospam
J'espère que c'est le bon newsgroup.
La doc de packet (man packet) spécifie qu'un appel "bind" ignore le
champ adresse de la structure "sockaddr_ll" qu'on lui passe ("For bind
only sll_protocol and sll_ifindex are used.").
Ma question est donc : qq'un saurait il comment spoofer son adresse
mac sous linux (en utilisant des raw socket?).



****** pour info
struct sockaddr_ll {
unsigned short sll_family; /* Always AF_PACKET
*/
unsigned short sll_protocol; /* Physical layer
protocol */
int sll_ifindex; /* Interface number
*/
unsigned short sll_hatype; /* Header type */
unsigned char sll_pkttype; /* Packet type */
unsigned char sll_halen; /* Length of address
*/
unsigned char sll_addr[8]; /* Physical layer
address */
};

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

3 réponses

Avatar
Frederic Raynal
In article , Florent Carli wrote:
J'espère que c'est le bon newsgroup.
La doc de packet (man packet) spécifie qu'un appel "bind" ignore le
champ adresse de la structure "sockaddr_ll" qu'on lui passe ("For bind
only sll_protocol and sll_ifindex are used.").
Ma question est donc : qq'un saurait il comment spoofer son adresse
mac sous linux (en utilisant des raw socket?).



Non testé et écrit comme cela à la volée ... bref, sans garantie, mais
ça devrait te donner la solution quand même ;)

int s;
struct ifreq ifr;
struct sockaddr_ll sa;

s = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
strncpy (ifr.ifr_name, device, sizeof(ifr.ifr_name) - 1); // ex: device="eth0"
ioctl(s, SIOCGIFINDEX, &ifr)

sa.sll_family = AF_PACKET;
sa.sll_protocol = htons(ETH_P_ALL);
a.sll_ifindex = ifr.ifr_ifindex;

/* packet contient les octets que tu veux envoyer sur le réseau
* jusqu'au niveau ethernet : tu y mets donc ce que tu veux !
*/
int c = sendto(s, packet, size, 0, (struct sockaddr *)&sa, sizeof (sa));
if (c != size)
...

Bon, il manque tous les tests sur les valeurs de retour des fonctions,
mais ça devrait passer quand même.


Pour info, si tu cherches à faire ce genre de manipulation, je te
recommande de passer par une bibliothèque, ce sera bien plus facile. Et
à tout hasard, va jeter un coup d'oeil sur libnet :

http://www.packetfactory.net/projects/libnet/


--
Frederic RAYNAL
http://www.security-labs.org/
Redacteur en chef de M.I.S.C.
Multi-Systems & Internet Security Cookbook

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
nospam
> Non testé et écrit comme cela à la volée ... bref, sans garantie, mais
ça devrait te donner la solution quand même ;)



En effet, ca marche bien merci du coup de pouce (si seulement j'avais
lu le man de packet plus a fond ...... :) )
Bref, meme si j'arrive maintenant a forger mes trames, ça ne résoud
pas le problème original (qui m'amenait à tenter ce mac spoofing):

Je cherche a m'auto-envoyer des paquets RST histoire de couper "à la
demande" des sessions tcp sur ma machine (qui n'est pas un firewall).
Si le RST que j'envoie à mon interlocuteur coupe bien la session de
son coté, le RST que je m'envoie à moi même (en me faisait passer pour
mon interlocuteur à toutes les couches réseau) ne sont pas pris en
compte, ou alors mal pris en compte puisqu'ils ne coupent pas la
connection.

Sans trop rentrer dans les détails (je suis sûr que mon paquet
"auto-envoyé" est le meme que ce que m'enverrait l'interlocuteur,
numéro de sequence y compris)... qq'un aurait il une idée qui ferait
que ces "autopackets" soit ignorés ?

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Did0
(Florent Carli) writes:
Sans trop rentrer dans les détails (je suis sûr que mon paquet
"auto-envoyé" est le meme que ce que m'enverrait l'interlocuteur,
numéro de sequence y compris)... qq'un aurait il une idée qui ferait
que ces "autopackets" soit ignorés ?



As-tu essayé avec le "spoof protect" désactivé ?

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 0 > $f
done


--
Dido

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.