Forum: Mikrocontroller und Digitale Elektronik Keine Antwort auf DHCP Discover (ENC28J60)


von M. G. (sirmel)


Lesenswert?

Hallo zusammen,

Bin grade dabei einen ENC28J60 zu programmieren, sodass ich diesen in 
ein DHCP Netzwerk integrieren kann. Wenn ich nun ein DHCP-Discover sende 
kommt das auch am Router an (ich habe den ENC28J60 und einen Laptop mit 
Wireshark an einen Router angeschlossen), der Router scheint aber kein 
DHCP-Offer loszuschicken. Das sehe ich dadran dass der ENC28J60 kein 
Paket empfaengt welches nur fuer seine MAC bestimmt ist (bei einem 
DHCP-Offer wird das Paket doch nur an die entsprechende MAC gesendet und 
nicht als Broadcast richtig?). Ansonsten werden aber alle 
Broadcastpakete empfangen. Ich habe meinen Code schon mit diversen 
anderen Codes verglichen, da sollte soweit alles stimmen. Im Anhang der 
Report von Wireshark, kann es sein dass mein DHCP-Paket falsch ist oder 
da noch was fehlt (Wireshark erkennt es aber als DHCP-Discover und ich 
habe es so aufgebaut wie das DHCP-Discover Paket, welches mein Computer 
raussendet - MAC, IP etc natuerlich angepasst)?


1
No.     Time        Source                Destination           Protocol Length Hw src addr           Hw dest addr          Info                                                            New Column
2
   2195 1695.087315 0.0.0.0               255.255.255.255       DHCP     323    PollinEl_01:b9:13     Broadcast             DHCP Discover - Transaction ID 0xbadccdab                       2195
3
4
Frame 2195: 323 bytes on wire (2584 bits), 323 bytes captured (2584 bits)
5
    Arrival Time: Jul 26, 2013 14:17:30.805484000 CST
6
    Epoch Time: 1374819450.805484000 seconds
7
    [Time delta from previous captured frame: 0.355258000 seconds]
8
    [Time delta from previous displayed frame: 0.355258000 seconds]
9
    [Time since reference or first frame: 1695.087315000 seconds]
10
    Frame Number: 2195
11
    Frame Length: 323 bytes (2584 bits)
12
    Capture Length: 323 bytes (2584 bits)
13
    [Frame is marked: False]
14
    [Frame is ignored: False]
15
    [Protocols in frame: eth:ip:udp:bootp]
16
    [Coloring Rule Name: UDP]
17
    [Coloring Rule String: udp]
18
Ethernet II, Src: PollinEl_01:b9:13 (00:22:f9:01:b9:13), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
19
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
20
        Address: Broadcast (ff:ff:ff:ff:ff:ff)
21
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
22
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
23
    Source: PollinEl_01:b9:13 (00:22:f9:01:b9:13)
24
        Address: PollinEl_01:b9:13 (00:22:f9:01:b9:13)
25
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
26
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
27
    Type: IP (0x0800)
28
Internet Protocol Version 4, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255 (255.255.255.255)
29
    Version: 4
30
    Header length: 20 bytes
31
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
32
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
33
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
34
    Total Length: 323
35
    Identification: 0x0000 (0)
36
    Flags: 0x00
37
        0... .... = Reserved bit: Not set
38
        .0.. .... = Don't fragment: Not set
39
        ..0. .... = More fragments: Not set
40
    Fragment offset: 0
41
    Time to live: 128
42
    Protocol: UDP (17)
43
    Header checksum: 0x39ab [correct]
44
        [Good: True]
45
        [Bad: False]
46
    Source: 0.0.0.0 (0.0.0.0)
47
    Destination: 255.255.255.255 (255.255.255.255)
48
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
49
    Source port: bootpc (68)
50
    Destination port: bootps (67)
51
    Length: 289
52
    Checksum: 0x0000 (none)
53
        [Good Checksum: False]
54
        [Bad Checksum: False]
55
Bootstrap Protocol
56
    Message type: Boot Request (1)
57
    Hardware type: Ethernet
58
    Hardware address length: 6
59
    Hops: 0
60
    Transaction ID: 0xbadccdab
61
    Seconds elapsed: 0
62
    Bootp flags: 0x0000 (Unicast)
63
        0... .... .... .... = Broadcast flag: Unicast
64
        .000 0000 0000 0000 = Reserved flags: 0x0000
65
    Client IP address: 0.0.0.0 (0.0.0.0)
66
    Your (client) IP address: 0.0.0.0 (0.0.0.0)
67
    Next server IP address: 0.0.0.0 (0.0.0.0)
68
    Relay agent IP address: 0.0.0.0 (0.0.0.0)
69
    Client MAC address: PollinEl_01:b9:13 (00:22:f9:01:b9:13)
70
    Client hardware address padding: 00000000000000000000
71
    Server host name not given
72
    Boot file name not given
73
    Magic cookie: DHCP
74
    Option: (t=12,l=16) Host Name = "AVR NET-IO BOARD"
75
        Option: (12) Host Name
76
        Length: 16
77
        Value: 415652204e45542d494f20424f415244
78
    Option: (t=53,l=1) DHCP Message Type = DHCP Discover
79
        Option: (53) DHCP Message Type
80
        Length: 1
81
        Value: 01
82
    Option: (t=55,l=17) Parameter Request List
83
        Option: (55) Parameter Request List
84
        Length: 17
85
        Value: 011c02030f06770c2c2f1a792a79f9fc2a
86
        1 = Subnet Mask
87
        28 = Broadcast Address
88
        2 = Time Offset
89
        3 = Router
90
        15 = Domain Name
91
        6 = Domain Name Server
92
        119 = Domain Search [TODO:RFC3397]
93
        12 = Host Name
94
        44 = NetBIOS over TCP/IP Name Server
95
        47 = NetBIOS over TCP/IP Scope
96
        26 = Interface MTU
97
        121 = Classless Static Route
98
        42 = Network Time Protocol Servers
99
        121 = Classless Static Route
100
        249 = Private/Classless Static Route (Microsoft)
101
        252 = Private/Proxy autodiscovery
102
        42 = Network Time Protocol Servers
103
    End Option
104
105
0000  ff ff ff ff ff ff 00 22 f9 01 b9 13 08 00 45 00   ......."......E.
106
0010  01 43 00 00 00 00 80 11 39 ab 00 00 00 00 ff ff   .C......9.......
107
0020  ff ff 00 44 00 43 01 21 00 00 01 01 06 00 ba dc   ...D.C.!........
108
0030  cd ab 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
109
0040  00 00 00 00 00 00 00 22 f9 01 b9 13 00 00 00 00   ......."........
110
0050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
111
0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
112
0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
113
0080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
114
0090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
115
00a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
116
00b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
117
00c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
118
00d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
119
00e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
120
00f0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
121
0100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
122
0110  00 00 00 00 00 00 63 82 53 63 0c 10 41 56 52 20   ......c.Sc..AVR 
123
0120  4e 45 54 2d 49 4f 20 42 4f 41 52 44 35 01 01 37   NET-IO BOARD5..7
124
0130  11 01 1c 02 03 0f 06 77 0c 2c 2f 1a 79 2a 79 f9   .......w.,/.y*y.
125
0140  fc 2a ff

von andi6510 (Gast)


Lesenswert?

DHCP hat auch einen broadcast mode bei dem alle Pakete per broadcast 
verschickt werden, auch wenn die empfangende MAC-Addresse bereits 
bekannt ist. Wird am Server bzw Client konfiguriert ist aber eher 
unüblich.

Wenn du direkt am Router mit wireshark und separatem Laptop die Pakete 
anschaust, wirst du nur broadcast pakete sehen und die Pakete die direkt 
an den Laptop gehen. Der Ethernetswitch am Routerausgang wird dir aber 
alle Pakete, welche für eine andere MAC Adresse bestimmt sind, 
vorenthalten. So auch die DHCP-Offer Message (es sei denn sie geht per 
broadcast raus - siehe oben). Die Lösung für dieses Problem ist einen 
konfigurierbaren Switch mit Monitorport zu verwenden oder einen guten 
alten Ethernet HUB (wird seit gefühlten 50 Jahren nicht mehr verkauft).

Wenn diese Hürde genommen ist könnte es in deinem Fall sehr hilfreich 
sein den DHCP-traffic eines anderen Gerätes komplett mitzuschneiden und 
als Referenz für die eigene Implementierung zu verwenden.

von Hans Ulli K. (Gast)


Lesenswert?

Also entweder einen Rechner mit DHCP Server aufsetzen und darauf 
Wireshark laufen lassen.
Oder einen OpenWRT kompatiblen Router benutzen und dann tcpdump 
verwenden.

Mit Wireshark am Switchport vom Router zu hängen ist Blödsinn.

von M.G (Gast)


Lesenswert?

Ok super, danke für die Hilfe:). Die Idee mit dem Switch hatte ich auch, 
hab mir schon gedacht dass der Router mir die Pakete die ich eigentlich 
sehen will blockt. Dann werd ich mal in der Technikkiste wühlen müssen, 
nen alter Hub sollte noch irgendwo rumfliegen:D.

Komischerweise zeigt mit der Router im Log aber an dass er nen 
DHCP-Discover empfängt, leider kann ich nicht sehen ob er auch drauf 
antwortet. Kennt ihr nen Programm mit dem ich empfangene Pakete 
editieren und zurücksenden kann? Das würde die ganze Sache zum testen 
ziemlich vereinfachen.

von c-hater (Gast)


Lesenswert?

andi6510 schrieb:

> Wenn du direkt am Router mit wireshark und separatem Laptop die Pakete
> anschaust, wirst du nur broadcast pakete sehen und die Pakete die direkt
> an den Laptop gehen.

Kommt drauf an. Bei vielen Consumer-Routern mit weniger als 4 LAN-Ports 
sind sämtliche vorhandenen LAN-Ports auf Layer 2 gebridged, das sind 
also praktisch Hubs, keine Switches.

von M. G. (sirmel)


Lesenswert?

Also ich habe jetzt zwei verschiedene Router ausprobiert, der eine 
sendet ein DHCP-OFFER zurück, der andere anscheinend nicht. Hab leider 
noch keinen Hub um über Wireshark wirklich zu sehen was gesendet wird 
aber der ENC28j60 empfängt von dem einen Router auf jeden Fall ein 
DHCP-OFFER, welches auch an die richtige MAC gerichtet ist.

Aber mehr als "DHCP-Enable" und den IP-Bereich kann ich bei dem Router 
ja nicht konfigurieren oder muss ich da noch auf irgendwelche 
Einstellungen achten?

von M. G. (sirmel)


Lesenswert?

Ok jetzt funktioniert es, ich hatte am Ende vom Paket nochmal manuel ein 
Padding-Field angehängt, jetzt wo ich dieses entfernt habe antworten mir 
beide Router auf den DHCP-Discover:).

Vielen Dank für eure Hilfe

von Rainer S. (rsonline)


Lesenswert?

Bootp flags: 0x0000 (Unicast)

        0... .... .... .... = Broadcast flag: Unicast

        .000 0000 0000 0000 = Reserved flags: 0x0000

Das erste Bit sollte eigentlich auf 1 sein bei der ersten Anfrage, 
später dann auf 0.

von Kalender Kalender (Gast)


Lesenswert?

Rainer S. schrieb:
> Das erste Bit sollte eigentlich auf 1 sein bei der ersten Anfrage,
> später dann auf 0.

Kaum acht Jahre später kommt schon diese Information. Wie nützlich.

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.