2012-04-02 3 views

Antwort

0

Warum Sie nicht tun etwas entlang der Linien von Aufrufen der ifconfig Befehl auf der Schale in Ihrem C-Code:

system("ifconfig eth0 ..."); 

Dies beseitigt die Notwendigkeit, einen Dateideskriptor zu haben, sondern ermöglicht es Ihnen, Verwalten Sie das Gerät mit dem Befehl. Machen Sie eine Mann ifconfig, um zu sehen, wie Sie Ihre ifconfig Anfrage zu verwalten, was Sie mit der Schnittstelle tun müssen.

Wenn Sie eine niedrigere Ebene benötigen, dann können Sie einfach einen Raw-Socket öffnen ... den Index des zu manipulierenden Ethernet-Geräts zuweisen ... und dann Ihre ioctl() 'verwenden s zu konfigurieren, je nach Bedarf:

if ((fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) { 
    perror("socket"); 
} 

struct ifreq req; 
strncpy(req.ifr_name, "eth0", IFNAMSIZ-1); 
if (ioctl(fd, SIOCGIFINDEX, &ifreq) < 0) 
    perror("SIOCGIFINDEX"); 

Dann haben Sie Ihren Griff zu eth0 ...

+0

aber er sagte, er will nicht Sockets ... – littleadv

+0

Einverstanden ... aber ich verstehe nicht die Abneigung gegen die Verwendung von Dateideskriptoren hier ... sowieso der erste Code-Schnipsel (ohne Socket-Implementierung) könnte alles sein, was er tun muss. –

+0

Einverstanden, das OP scheint nicht genug Informationen zu teilen, um wirklich die Frage zu beantworten ... – littleadv

0

Ja, Sie können über die entsprechenden ioctl Anrufe direkt mit dem Netzwerkschnittstellentreiber sprechen. Weitere Informationen finden Sie in Ihrer Treiber-API-Referenz. Einige Betriebssysteme bieten möglicherweise auch Zugriff über ihre eigene API, siehe z. B. this question.

+0

Ok, aber in der ioctl ich sende den Dateideskriptor. Ohne Sockel, welchen fd sollte ich benutzen? – user1307697

+0

@ user1307697 Sie erkennen, dass niemand Ihnen antworten kann, ohne dass Sie uns mindestens sagen, welches Betriebssystem Sie verwenden, richtig? Probieren Sie zunächst/dev/eth0 aus. – littleadv

+0

tut mir leid ... ich benutze Linux mint – user1307697