phillibobilli
23.03.2005, 19:43
Hallo!
System: Linux
Ich will mit einem kleinen Programm alle Pakete lesen, die über eine Bestimmte Netzwerkkarte gehen. Diese Pakete will ich dann auswerten und eventuell darauf antworten. Das mit dem einlesen hab ich ja so weit geschafft. Das sieht dann wie folgt aus:
int sock;
char buffer[2048];
struct ifreq ethreq;
if ((sock=socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ALL)))<0)
{
perror("socket");
exit(1);
}
strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);
if (ioctl(sock,SIOCGIFFLAGS,ðreq)==-1)
{
perror("ioctl");
close(sock);
exit(1);
}
ethreq.ifr_flags|=IFF_PROMISC;
if (ioctl(sock,SIOCSIFFLAGS,ðreq)==-1)
{
perror("ioctl");
close(sock);
exit(1);
}
while (1)
{
n = recvfrom(sock,buffer,2048,0,NULL,NULL);
}
Jetzt enthält die Variable buffer alle Daten eines Paketes und ich kann diese auswerten.
Will ich aber jetzt ein Paket senden, dann hab ich mir gedacht ich nehme die Funktion sendto().
n = sendto(sock,buffer,2048,0,NULL,NULL);
Aber die Funktion versendet die Daten nicht. Worauf ich die Optionen(ifr_flags) ändern wollte. Doch welche Werte muss ich da setzten? Ich bin irgendwie aus den linux man pages und den *.h Dateien nicht ganz schlau geworden.
Kann mir da jemand Helfen und ist der Weg bis hier her schon mal richtig oder gibt es eine bessere Möglichkeit.
Danke schon mal für's Lesen.
Gruß Phil
System: Linux
Ich will mit einem kleinen Programm alle Pakete lesen, die über eine Bestimmte Netzwerkkarte gehen. Diese Pakete will ich dann auswerten und eventuell darauf antworten. Das mit dem einlesen hab ich ja so weit geschafft. Das sieht dann wie folgt aus:
int sock;
char buffer[2048];
struct ifreq ethreq;
if ((sock=socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ALL)))<0)
{
perror("socket");
exit(1);
}
strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);
if (ioctl(sock,SIOCGIFFLAGS,ðreq)==-1)
{
perror("ioctl");
close(sock);
exit(1);
}
ethreq.ifr_flags|=IFF_PROMISC;
if (ioctl(sock,SIOCSIFFLAGS,ðreq)==-1)
{
perror("ioctl");
close(sock);
exit(1);
}
while (1)
{
n = recvfrom(sock,buffer,2048,0,NULL,NULL);
}
Jetzt enthält die Variable buffer alle Daten eines Paketes und ich kann diese auswerten.
Will ich aber jetzt ein Paket senden, dann hab ich mir gedacht ich nehme die Funktion sendto().
n = sendto(sock,buffer,2048,0,NULL,NULL);
Aber die Funktion versendet die Daten nicht. Worauf ich die Optionen(ifr_flags) ändern wollte. Doch welche Werte muss ich da setzten? Ich bin irgendwie aus den linux man pages und den *.h Dateien nicht ganz schlau geworden.
Kann mir da jemand Helfen und ist der Weg bis hier her schon mal richtig oder gibt es eine bessere Möglichkeit.
Danke schon mal für's Lesen.
Gruß Phil