mikrocontroller.net

Forum: PC-Programmierung Netzwerkpakete generieren


Autor: vyt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist schon klar, dass es so einen Thread schonmal gab, allerdings 
scheint der sich todgelaufen zu haben: Wie schaffe ich es mit reinem 
C/C++ (assembler, falls nötig), Netzwerkpakete Byte für Byte selbst zu 
erschaffen und dann mit 'ner normalen Netzwerkkarte zu senden (Unter 
Windows), ohne irgendeine schräge Fertiglib zu verwenden?

Ich will keine TCP Verbindungen über Sockets, ich will viel mehr.

Selbst bestimmen will ich bei dem Paket alle Schichten des OSI Modells 
(SRC-Mac, DST-Mac, SRC-Port, DST-Port, etc.).

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: vyt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Lib, aber damit kann ich leben - danke dir.

Autor: vyt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdlib.h>
#include <stdio.h>

#include <pcap.h>


int main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
u_char packet[100];
int i;

    /* Check the validity of the command line */
    if (argc != 2)
    {
        printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]);
        return 0;
    }

    /* Open the output device */
    if ( (fp= pcap_open(argv[1],            // name of the device
                        100,                // portion of the packet to 
capture (only the first 100 bytes)
                        PCAP_OPENFLAG_PROMISCUOUS,  // promiscuous mode
                        1000,               // read timeout
                        NULL,               // authentication on the 
remote machine
                        errbuf              // error buffer
                        ) ) == NULL)
    {
        fprintf(stderr,"\nUnable to open the adapter. %s is not 
supported by WinPcap\n", argv[1]);
        return 0;
    }

    /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 
*/
    packet[0]=1;
    packet[1]=1;
    packet[2]=1;
    packet[3]=1;
    packet[4]=1;
    packet[5]=1;

    /* set mac source to 2:2:2:2:2:2 */
    packet[6]=2;
    packet[7]=2;
    packet[8]=2;
    packet[9]=2;
    packet[10]=2;
    packet[11]=2;

    /* Fill the rest of the packet */
    for(i=12;i<100;i++)
    {
        packet[i]=(u_char)i;
    }

    /* Send down the packet */
    if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
    {
        fprintf(stderr,"\nError sending the packet: %s\n", 
pcap_geterr(fp));
        return 0;
    }

    return 0;
}




Dieser Code lässt sich nicht kompilieren; Fehlermeldung:
PCAP_OPENFLAG_PROMISCUOUS was not declared in this scope
pcap_open was not declared in this scope


Ich hab die Libs installiert, was man wohl schon daran sieht, dass er an 
sonsten den Code schluckt.
Woran liegts also?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vyt schrieb:

> Woran liegts also?

dein Beispielcode passt nicht zu deiner PCAP-Version und/oder du musst 
die "remote-ext.h" noch includieren.


Die kompatible Open-Funktion wäre:
pcap_t *   pcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf)


Autor: vyt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gefixed (seltsames Problem, Code unmittelbar von pcap Dev-Doc 
übernommen).

Neues Problem:

undefined reference to `_pcap_open_live'|
undefined reference to `_pcap_sendpacket'|
undefined reference to `_pcap_geterr'|



Kann doch garnicht angehen, da ich diese Funktionen nicht verwende (dass 
er die Protoypen im Header nicht findet ist ja kein Wunder)

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Typischer Layer-8-Fehler:

Wie linkt man wohl gegen eine Libary unter c?

-lpcap ist dein Freund...

Autor: vyt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite sonst fast ausschließlich mit Standartbiliotheken, Linken 
ist fast sowas wie'n Fremdwort für mich.

Jedenfalls .. gesagt, getan.

Woher nehme ich nun den passenden Wert für "device name" - ist es die 
MAC-Adresse der Netzwerkkarte?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.