J'écris un outil en C pour consigner l'utilisation des données des différentes applications s'exécutant sur mon système Linux. Pour cela j'ai créé un socket raw et ensuite je le lie avec "eth0" qui est le nom de mon interface. Mais mon problème est que ces sockets ne capturent que les paquets entrants (ie: les paquets avec l'adresse MAC de destination comme adresse MAC de mon système). Je ne trouve aucun paquet ayant l'adresse MAC source comme adresse MAC de mon système. Cela signifie donc que les paquets écrits par ma propre machine ne sont pas capturés par le socket raw. Mais je veux capturer des paquets dans les deux directions pour identifier la taille des données téléchargées et téléchargées. Quelqu'un peut-il aider?capture des paquets entrants et sortants à l'aide de la socket raw
int main()
{
int rs,len;
struct sockaddr_ll addr;
char buf[65535];
rs = socket(PF_PACKET,SOCK_RAW,htons(ETH_ALL));
setsockopt(rs,SOL_SOCKET,SO_BINDDEVICE,"eth0",4);
while(recvfrom(rs,buf,65535,&addr,&len) > 0){
//print packets
}
return 0;
}
Merci pour votre réponse. Mais il n'y a pas de macro nommé PACKET_MASK_ANY dans mon/usr/include –
#define PACKET_MASK_ANY 0xffffffff/* masque pour les bits de type de paquet */define PACKET_OUTGOING 4/* Sortant de tout type */define PACKET_RECV_TYPE 18 –
Il n'y a pas macro d'opération de socket nommée PACKET_RECV_TYPE. êtes-vous du Kerala? –