- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 11

Thema: Ethernet-Frame empfangen von ENC28J60 analysieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75

    Ethernet-Frame empfangen von ENC28J60 analysieren

    Hallo!
    Ich habe mir das AVR-NET-IO-Board von Pollin besorgt.
    Natürlich habe ich das, weil ich mich in die Ethernet-Technik einarbeiten möchte.
    Erstes Ziel sollte es sein, eine Verbindung mit dem Board herzustellen. Dazu soll noch kein Webserver oder der gleichen auf dem Mega32 implementiert werden, sondern
    schlichtweg ein 3-Way-Handshake stattfinden.

    Also jetzt eine kurze Einleitung in meine Welt, damit Ihr so ungefähr bescheid wisst und mir evtl weiterhelfen könnt:

    Ich habe ein einfaches Programm in C für meinen Rechner (Linux Ubuntu) geschrieben, welches mir einen Socket bereitstellt, der als Client auf Port 80 der IP 192.168.2.60 eine Verbindung anfragt. Verbunden ist mein Rechner über ein Crossover-Netzwerkkabel mit dem AVR-NET-IO.
    Der Mega32 horcht auch PINB2, ob der ENC28J60 ein Paket empfangen hat. Hat dieser etwas empfangen holt der Mega32 das Paket ab und speichert es in einem Feld.
    Dieses Feld in dem sich das Paket befindet wird dann über die UART an meinen PC geschickt....und hier ist das Resultat in aufgearbeiteter Form:
    (Aufgearbeitet hat das ein ebenfalls von mir geschriebenes einfaches Programm, das mir das Resultat der wirren Zeichenkette, die ich über die RS232 bekommen habe in Dezimal und Hexadezimalwerte wandelt und sauber in eine Datei schreibt, was das analysieren etwas leichter macht.

    Code:
    Alle "c" bzw 99(DEZ) bzw 0x63(HEX) sind eigentlich 0-Bytes (0x00), die aber im Controller auf 99 gesetzt werden, da sie sonst verschluckt würden aber im Feld (MCU) vorhanden sind!
    
     0. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111  DESTINATION MAC (6 Byte)
     1. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
     2. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
     3. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
     4. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
     5. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
     6. Zeichen=    Dezimal:    3  Hexadezimal:    3  Bitfolge(LSB): 00110000 SOURCE MAC (6 Byte)
     7. Zeichen=   }  Dezimal:  124  Hexadezimal:   7c  Bitfolge(LSB): 1011100
     8. Zeichen=   {  Dezimal:  122  Hexadezimal:   7a  Bitfolge(LSB): 1111110
     9. Zeichen=   ·  Dezimal:  182  Hexadezimal:   b6  Bitfolge(LSB): 1111101
    10. Zeichen=   ~  Dezimal:  125  Hexadezimal:   7d  Bitfolge(LSB): 00001110
    11. Zeichen=    Dezimal:  126  Hexadezimal:   7e  Bitfolge(LSB): 11101110
    12. Zeichen=     Dezimal:    8  Hexadezimal:    8  Bitfolge(LSB): 00010000 ???????
    13. Zeichen=    Dezimal:    6  Hexadezimal:    6  Bitfolge(LSB): 01100000
    14. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    15. Zeichen=    Dezimal:    1  Hexadezimal:    1  Bitfolge(LSB): 10000000
    16. Zeichen=     Dezimal:    8  Hexadezimal:    8  Bitfolge(LSB): 00010000
    17. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    18. Zeichen=    Dezimal:    6  Hexadezimal:    6  Bitfolge(LSB): 01100000
    19. Zeichen=    Dezimal:    4  Hexadezimal:    4  Bitfolge(LSB): 00100000
    20. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    21. Zeichen=    Dezimal:    1  Hexadezimal:    1  Bitfolge(LSB): 10000000
    22. Zeichen=    Dezimal:    3  Hexadezimal:    3  Bitfolge(LSB): 00110000
    23. Zeichen=   }  Dezimal:  124  Hexadezimal:   7e  Bitfolge(LSB): 10110010
    24. Zeichen=   {  Dezimal:  122  Hexadezimal:   7a  Bitfolge(LSB): 11011111
    25. Zeichen=   ·  Dezimal:  182  Hexadezimal:   b6  Bitfolge(LSB): 11001101
    26. Zeichen=   ~  Dezimal:  125  Hexadezimal:   7d  Bitfolge(LSB): 01111111
    27. Zeichen=    Dezimal:  126  Hexadezimal:   7e  Bitfolge(LSB): 11101110
    28. Zeichen=   À  Dezimal:  192  Hexadezimal:   c0  Bitfolge(LSB): 00000011 SOURCE IP
    29. Zeichen=   š  Dezimal:  168  Hexadezimal:   a8  Bitfolge(LSB): 00010101
    30. Zeichen=    Dezimal:    2  Hexadezimal:    2  Bitfolge(LSB): 01000000
    31. Zeichen=   Š  Dezimal:  166  Hexadezimal:   a6  Bitfolge(LSB): 01100101
    32. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    33. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    34. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    35. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    36. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    37. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    38. Zeichen=   À  Dezimal:  192  Hexadezimal:   c0  Bitfolge(LSB): 00000011 DESTINATION IP
    39. Zeichen=   š  Dezimal:  168  Hexadezimal:   a8  Bitfolge(LSB): 00010101
    40. Zeichen=    Dezimal:    2  Hexadezimal:    2  Bitfolge(LSB): 01000000
    41. Zeichen=   <  Dezimal:   60  Hexadezimal:   3c  Bitfolge(LSB): 00111100
    42. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    43. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    44. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    45. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    46. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    47. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    48. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    49. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    50. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    51. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    52. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    53. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    54. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    55. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    56. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    57. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    58. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    59. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    60. Zeichen=   è  Dezimal:  232  Hexadezimal:   e8  Bitfolge(LSB): 00010111 FRAME CHECK SEQUENCE
    61. Zeichen=   ¬  Dezimal:  172  Hexadezimal:   ac  Bitfolge(LSB): 00110101
    62. Zeichen=   Š  Dezimal:  166  Hexadezimal:   a6  Bitfolge(LSB): 01100101
    63. Zeichen=   Z  Dezimal:   90  Hexadezimal:   5a  Bitfolge(LSB): 01011010
    64. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110
    ->HIER FOLGEN NUR NULLEN..<-
    199. Zeichen=   c  Dezimal:   99  Hexadezimal:   63  Bitfolge(LSB): 11000110 
    200. Zeichen=   !  Dezimal:   33  Hexadezimal:   21  Bitfolge(LSB): 10000100
    201. Zeichen=      Dezimal:   32  Hexadezimal:   20  Bitfolge(LSB): 00000100
    202. Zeichen=   X  Dezimal:   88  Hexadezimal:   58  Bitfolge(LSB): 00011010
    203. Zeichen=   ÿ  Dezimal:  255  Hexadezimal:   ff  Bitfolge(LSB): 11111111
    Einiges habe ich ja schon herausinterpretieren können. Die 6 Byte mit dem Inhalt 255 am Anfang sind die für meinen Laptop noch unbekannte Bestandteile der MAC-Adresse. Die 6 Folgen von 255 sind eine allgemeine Adressierung. Daraufhin folgt meine MAC-Adresse, die ich für diesen Beitrag etwas verändert habe.
    Und dann einige Null-Bytes mit einigen Werten, die ich weder als IP-HEADER noch Länegenangabe oder VLAN-TAG logisch einordenen kann, da sie zu kurz sind oder von den Bitwerten her gar keinen Sinn ergeben...Die Frage ist also...was ist das für ein Mist der da steht???
    Eiegntlich sollte man meinen, ich müsste einen Ethernet-Frame mit VLAN-Tag oder Längenangabe und noch mindestens einen gescheiten IP-HEADER haben.
    Da hab ich ja "nur" die Adressen scheinbar. Und ich brauche um eine Verbindung aufzubauen ja noch wenigstens ein Byte, in dem ich ein SYN-Bit lesen kann.

    Kann mir jemand etwas dazu sagen?? =)
    Vielen Dank im Vorraus!

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Die 6 Byte mit dem Inhalt 255 am Anfang sind die für meinen Laptop noch unbekannte Bestandteile der MAC-Adresse.
    Und was sagt dir die Tatsache, dass der Laptop die Ziel-MAC-Adresse noch nicht kennt?
    Dass er diese erst mal ermitteln muss.

    Eiegntlich sollte man meinen, ich müsste einen Ethernet-Frame mit VLAN-Tag oder Längenangabe und noch mindestens einen gescheiten IP-HEADER haben.
    Das erste Paket, das du am AVR-NET-IO empfangen solltest (also Obiges), ist kein IP-Paket, sondern ein ARP-Paket.
    Geändert von sternst (13.01.2013 um 00:30 Uhr)
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Hallo,

    oh man ist das blöd.
    DANKE DANKE DANKE!
    Manchmal sieht man den Wald vor lauter Bäumen nicht !
    Vielen Dank für deine Antwort!!!!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Okay, also ich habe den ARP-Request in meinem Programm in einer Tabelle verarbeitet und meinem Rechner einen ARP-Reply zurückgegeben.
    Natürlich in dem vorgegebenen Muster.
    Sobald ich ihm den Reply geschickt habe, meckert er auch nicht direkt, dass er keine Verbindung aufbauen kann, aber er schickt auch kein Frame mehr in dem er eine Anfrage mit Portnummer und IP sendet. Sollte er das nicht eigentlich tun, oder muss ich nach dem ARP-Reply noch einen weiteren Frame senden???
    Komme leider nicht mehr weiter =(
    Ich habe das so verstanden, dass der Client (Rechner) doch eine Verbindung mit dem Server anfragen soll...
    Hat jemand einen Tip?

    Danke =)

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von pete1612 Beitrag anzeigen
    Natürlich in dem vorgegebenen Muster.
    Und genau da würde ich erst mal ansetzen. Hast du das überprüft? Hast du auf dem PC mal einen Sniffer laufen lassen, um zu sehen, was da tatsächlich ankommt?
    MfG
    Stefan

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Okay, mit Wire Shark hbae ich gesehen, dass tatsächlich ein TCP-Paket vom Laptop aus gesendet wurde.
    Der Fehler lag banalerweise an meiner MAC-Adresse. Sie steht "verkehrtherum" im ENC28J60 und meine Konstante im Programm ist dann falsch und das ARP-Paket wurde dann falsch gesendet und blabla...Der ENC hat dann das Paket einfach nicht mit seiner MAC-Adresse identfiziert und nicht im Buffer abgelegt...
    Jetzt gehts weiter mit Schritt zwei...TCP Paket annehmen, auswerten und beantworten...Mal sehen. Danke nochmal für deinen Tip!

Ähnliche Themen

  1. XMega und Ethernet mit ENC28J60
    Von ChRiZ im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 12.12.2012, 22:38
  2. [ERLEDIGT] Stacks und Frame ?
    Von PICture im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 09.12.2011, 17:10
  3. Dateirestsystem analysieren
    Von Furtion im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.12.2010, 00:11
  4. Ethernet-Bootloader für Atmega32+ENC28J60
    Von xlanhackerx im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 27.01.2009, 13:56
  5. USB Frame-Grabber mit Mikrocontroller nutzen
    Von mwoidt im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 01.10.2006, 19:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen