Forum: PC-Programmierung C++: Daten senden und empfangen, aber in der MAC-Schicht


von Raul (Gast)


Lesenswert?

Hallo!

Fuer eine Anwendung moechte ich einzelne MAC-Pakete versenden. Verwendet 
werden soll C++. Ich habe schon erfahren, wie man das per UDP und TCP 
macht, aber gehts auch weiter unten im OSI-Modell?
Kann ich zum beispiel (wenn 2 PCs ueber gekreuztes Ethernetkabel direkt 
verbunden sind) an eine MAC-Adresse (logischerweise die der Gegenstelle) 
eine Zeichenfolge zukommenlassen?
Bei Mikrocontrollern (so ala AVR mit ENC28j60) geht das, aber kann man 
das in einer hochsprache auch dem PC?

Danke fuer Tipps, bin auch nur fuer die richtigen Google-Suchbegriffe 
dankbar...

Gruesse

von Εrnst B. (ernst)


Lesenswert?

Schau dir mal die libpcap (oder winpcap, falls du Windows benutzen 
solltest) an, die kann direkt Pakete senden, und kapselt das ganze 
Betrübsystem-interne schön weg.

http://www.tcpdump.org/pcap.htm

von ... (Gast)


Lesenswert?

Als Einstieg vielleicht auch ein WOL_Proggie:
http://ahh.sourceforge.net/wol

von RelaisLI (Gast)


Lesenswert?

Herzlichen Dank, ich werde die mal testen ob ich mit dem was hin 
bekomme, sonst melde ich mich nochmal...

von Raul (Gast)


Lesenswert?

Hallo!

Ich habe mal mit den Examples vonn winpcap rumgespielt. Die kriege ich 
zum laufen.
Ich möchte aber ein Programm mit einer GUI erstellen und nicht so ein 
Konsolen-Ding und da wollte ich mal ein Beispiel (mit änderungen, dass 
die z.B. die empfangenen Pakete in einer Textbox angezeigt werden) in 
eine CLR/Win32 Applikation einbinden.
Beim compilieren resp. beim Linken kommt aber ein Fehler folgender Art:

Error  6  error LNK2019: unresolved external symbol "extern "C" int 
__clrcall pcap_findalldevs(struct pcap_if  ,char *)" 
(?pcap_findalldevs@@$$J0YMHPAPAUpcap_if@@PAD@Z) referenced in function 
"private: void __clrcall TestWin32::Form1::button1_Click(class 
System::Object ^,class System::EventArgs ^)" 
(?button1_Click@Form1@TestWin32@@$$FA$AAMXP$AAVObject@System@@P$AAVEvent 
Args@4@@Z)   TestWin32.obj  TestWin32


Hat von Euch schon mal jemand etwas hingekriegt mit diesem WinPcap-Ding 
und graphischer Oberfläche? Weiss jemand eine Lösung zum Problem? Das 
wär super...

von JojoS (Gast)


Lesenswert?

hast du die lib den auch als Input für den Linker hinzugefügt? Es gibt 
auch einen C# Wrapper für winpcap auf Sourceforge, der macht die Nutzung 
in der CLR bzw. unter C# um einiges einfacher.

von Raul (Gast)


Lesenswert?

Hallo!
Ja, das habe ich (glaube ich zuindest) mit folgenden Zeilen:
1
#pragma comment(lib, "ws2_32.lib")
2
#pragma comment(lib, "wpcap.lib")

Die Fehlermeldungen sind auch nicht mehr die gleichen, wenn ich die 
Zeilen weglasse. Also schon noch Linker-Errors aber nicht exakt die 
gleichen.
Es gibt unter den Project-Settings die Möglichkeit dem Linker 
zusätzliche Dateien anzugeben. Doch da steig ich irgendwie nicht durch: 
wie kann ich unter additional dependies dateien auswählen? Da kann ich 
nicht beliebige auswählen, nur einige die mich aber irgendwie nicht 
interessieren...
Ich gebs jetzt dann auf :(

von JojoS (Gast)


Lesenswert?

die Libs müssen auch gefunden werden, kopiere die libs mal in das 
Projektverzeichnis.

von Raul (Gast)


Lesenswert?

OK, das habe ich hinbekommen...
Ich frage mich jetzt, ob der Code mit der libcap-Library portierbar ist 
auf Linux. Habe leider grad keinen PC mit Linux drauf. Aber hat da 
jemand Erfahrung mit?
Ziel wäre es, den gleichen Code für Linux und Windows zu kompilieren 
(jeweils auf dem entsprechenden System). Leider konnte ich per google 
keine sicheren Resultate in Erfahrung bringen. Da ist oft recht konfus 
von libpcap und winpcap die rede, aber was wie zu einander steht ist mir 
noch schleierhaft. Und ich möchte nicht einen Haufen Arbeit in das Ding 
steckum dann von Euch zu erfahren, dass es mit was anderem viel 
einfacher gewesen wäre.
Kann da jemand Licht ins Dunkel bringen? Ist das mit der LibPcap möglich 
oder wo liegt der Unterschied?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.