Hi
ich muss mich zur Zeit mit Socket-Programmierung herumschlagen. Es soll eine Art Filter auf Low Level Ebene erstellt werden.
Soweit funktioniert auch alles mit einem RAW SOCKET.... nur das Problem ist, dass er jetzt von allen Netzwerkinterfaces liest (der Rechner hier hat 4 Netzwerkkarten) mich interessiert aber nur der Traffic von einer Karte.
Weiß jemand wie ich einen RAW SOCKET so einstelle, dass er nur von einer Karte empfängt. Beim Senden von Packeten muss man ja auch ein bestimmtes Interface angeben, dann muss das doch auch beim Empfangen gehen. Ich habe schon einige Sachen nachgeschaut (ioctl, setsockopt, bind) aber habe noch nichts relevantes gefunden.
Ich kann auch nicht die MAC-Adresse im Paket überprüfen und daher eine Zuordnung vornehmen, weil die Karte im promiscuous-mode laufen soll.
Bin für jeden Hinweis dankbar.
Ciao
Bisher läuft es kurzgefasst ungefähr so:
ich muss mich zur Zeit mit Socket-Programmierung herumschlagen. Es soll eine Art Filter auf Low Level Ebene erstellt werden.
Soweit funktioniert auch alles mit einem RAW SOCKET.... nur das Problem ist, dass er jetzt von allen Netzwerkinterfaces liest (der Rechner hier hat 4 Netzwerkkarten) mich interessiert aber nur der Traffic von einer Karte.
Weiß jemand wie ich einen RAW SOCKET so einstelle, dass er nur von einer Karte empfängt. Beim Senden von Packeten muss man ja auch ein bestimmtes Interface angeben, dann muss das doch auch beim Empfangen gehen. Ich habe schon einige Sachen nachgeschaut (ioctl, setsockopt, bind) aber habe noch nichts relevantes gefunden.
Ich kann auch nicht die MAC-Adresse im Paket überprüfen und daher eine Zuordnung vornehmen, weil die Karte im promiscuous-mode laufen soll.
Bin für jeden Hinweis dankbar.
Ciao
Bisher läuft es kurzgefasst ungefähr so:
Code:
int sock;
struct ifreq ifinfo;
char packet[PACKETSIZE];
struct ethhdr *eth = (struct ethhdr *) packet;
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
strcpy(ifinfo.ifr_name, "eth1");
ioctl(sock, SIOCGIFFLAGS, &ifinfo);
ifinfo.ifr_ifru.ifru_flags |= IFF_PROMISC;
ioctl(sock, SIOCSIFFLAGS, &ifinfo);
while(1) {
read(sock, packet, PACKETSIZE);
printf("src-mac:%s\n", ether_ntoa((struct ether_addr*)eth->h_source));
}