Forum: Mikrocontroller und Digitale Elektronik AVR WebServer und Google Chrome?


von Jurik (Gast)


Lesenswert?

Hallo,
ich habe klein Webserver gebaut mit Atmega32 und ENC28j60.
Soweit funktioniert alles, aber nur mit IExplorer von Windows.

Wenn ich versuche AVR Seite mit andere Browser ofnen, zeigt
"Keine Seite gefunden".

Hat jemand das gleiche Problemm?

von heinzhorst (Gast)


Lesenswert?

Hast du dir schon mal den HTTP-Request und die Antwort mit Wireshark 
angeschaut?

von Gerald *. (pyromane)


Lesenswert?

Evtl Proxy eingeschaltet?

von Purzel H. (hacky)


Lesenswert?

Etwas Debugging bitte. Was sollte kommen, was kommt ?

von Jurik (Gast)


Lesenswert?

Ich kann wirklich nur mit IE auf mein Webserver zugreifen.

Mit mein IPhone geht auch nicht.
Wie kann ich mit Wireshark HTTP-Request anschauen?

von Mutti (Gast)


Lesenswert?

Hi Jurik.
Hast Du die letzten Beiträge verstanden ?

von Jurik (Gast)


Lesenswert?

Proxy ist ausgeschaltet.
Mit Wireshark verstehe ich nicht ganz.

von heinzhorst (Gast)


Lesenswert?

Wireshark ist ein kostenloses Programm, mit dem du dir den gesamten 
Datenverkehr anschauen kannst, der über die Netzwerkschnittstelle deines 
PC geht. Es wird zum Beispiel bei der Entwicklung von 
Netzwerkkomponenten oder zu Ausbildungszwecken eingesetzt. Wie sind denn 
deine Vorkenntnisse zu Netzwerkprotokollen? Weißt du, wie TCP und HTTP 
funktionieren? Falls nicht, dann lies dich da man ein Bisschen ein. 
Sonst wirst du mit den Daten, die Du bei Wireshark mitlesen kannst, 
nicht viel anfangen können.

von Jurik (Gast)


Lesenswert?

Das ist schon klar.
Aber welches Unterschied ist zwischen IE und Chrome?

von heinzhorst (Gast)


Lesenswert?

OK, wenn du nicht willst...

Jurik schrieb:
> Aber welches Unterschied ist zwischen IE und Chrome?


IE ist ein Browser von Microsoft.
Chrome ist ein Browser von Google.

Hilft dir diese Antwort weiter? Nein?

von Purzel H. (hacky)


Lesenswert?

Den Unterschied wirst dann feststellen. Vielleicht ist der Eine etwas 
grosszuegiger mit einer unvollstaendigen Seite ? Vielleicht fehlt nur 
ein END-zeichen...

von Mutti (Gast)


Lesenswert?

Könnte es sein dass IE Dir augenblicklich Seiten Deines Servers aus dem 
Cache anzeigt ?
Somit wäre der Unterschied zwischen IE und Chrome der, dass IE schonmal 
auf Deinem Server war (als er funktionierte) und sich Dinge gemerkt hat, 
die es augenblicklich garnicht mehr abzuholen gibt (weil er kaputt ist).

von Jurik (Gast)


Angehängte Dateien:

Lesenswert?

Also, ich habe 2 x pcap gemacht.
ein mal mit IE und einmal mit Chrome.

Die beide sind schon unterschiedlich.
Wer kann damit was anfangen?
PC-IP ist .42
AVR-IP ist .70

von Jurik (Gast)


Lesenswert?

Mutti,
unmöglich!

Weil Server lauft und schaltet auch die Relays ein - aus.

Sage, aber nur mit IE

von Jurik (Gast)


Lesenswert?

heinzhorst,

Dieses Unterschied kenne ich auch,
und das das Safari von Mac ist.

von Gerald *. (pyromane)


Lesenswert?

Jurik schrieb:
> PC-IP ist .42
> AVR-IP ist .70

Also beim IE wird eine korrekte GET Anfrage an den AVR Webserver 
geschickt und von diesem auch mit dem HTML Dokument beantwortet.

Beim Chrom wird gar keine GET Anfrage an den AVR Webserver geschickt 
(oder du hast sie nicht aufgezeichnet), dafür versucht der AVR Webserver 
einige fehlerhafte Pakete an den PC zu schicken.

von g457 (Gast)


Lesenswert?

> Die beide sind schon unterschiedlich.

Die wesentlichen Unterschiede beginnen damit dass Chrome die 
Window-Scale-Options mitschickt, der IE nicht. Von da an scheint der AVR 
kaputte Pakete zu schicken (u.a. mit irrwitzig hohen SEQ/ACK). Kann es 
sein dass Dein TCP-Stack die Options nicht (richtig(tm)) verarbeiten 
kann und deswegen durcheinanderkommt?

HTH

von Mutti (Gast)


Lesenswert?

Was genau steht bei Dir im Navigationsfeld von Chrome ?
Was genau steht bei Dir im Navigationsfeld vom IE?

das chrome.pcap scheint garkein "GET / HTTP/1.1" zu senden.. nichmal ein 
"GET".
Dann ist der server auch nicht gezwungen vernünftig zu antworten.

von Jurik (Gast)


Lesenswert?

Bei Navigationsfeld:

Nach Enter drucken:
IE: http://192.168.0.70/
Chrome: 192.168.0.70

Und warum Chrome (Safari) schick kein GET?

von Jurik (Gast)


Lesenswert?

Kännt sich jemand mit Bascom aus?

von g457 (Gast)


Lesenswert?

> das chrome.pcap scheint garkein "GET / HTTP/1.1" zu senden.. nichmal ein
> "GET".

wie ich schon schrub kommts so weit gar nicht. Aufgedröselt sieht die 
Kommunikation vereinfacht etwa so aus:
Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
AVR:    <mmmpfgrpl>
Chrome versteht nur Bahnhof, wartet kurz..
Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
AVR:    <mmmpfgrpl>
Chrome versteht nur Bahnhof, wartet etwas länger..
Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
AVR:    <mmmpfgrpl>
..
Chrome stellt fest dass das Gegenüber nicht will^Wkann und bricht ab.

Nix für ungut.

von heinzhorst (Gast)


Lesenswert?

> Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
> AVR:    <mmmpfgrpl>
> Chrome versteht nur Bahnhof, wartet kurz..
> Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
> AVR:    <mmmpfgrpl>
> Chrome versteht nur Bahnhof, wartet etwas länger..
> Chrome: Mach mal TCP-Verbindung mit Window-Scale-Options
> AVR:    <mmmpfgrpl>

Kenne micht zwar nicht aus mit dem NetIO, aber könnte es sein, dass der 
verwendete TCP/IP-Stack nicht normgerecht ist, sondern nur rundimentär?

von heinzhorst (Gast)


Lesenswert?

So, hab mir mal deinen PCAP-Files genauer angesehen. Beim SYN ACK-Paket 
3-Way Handshake von TCP ist der TCP-Header falsch. Genauer: Die 
Header-Länge (HLEN) stimmt nicht. In deinem PCAP-File steht da 0x80. Das 
ist die Länge in Bytes. Dort müsste aber die Länge in 32-Bit Wörtern 
stehen. Das wäre dann 0x20. Ich würde sagen, derjenige, der den 
TCP-Stack geschrieben hat, hat Mist gemacht und eine RFC nicht richtig 
interpretiert. Dass die Seite im einem anderen Browser angezeit wird, 
könnte daran liegen, dass dieser fehlertolleranter ist. Im das zu 
beheben müsstest du etwas tiefer in den Quellcode des TCP-Stacks 
eintauchen. Welchen Stack verwendest du denn?

von heinzhorst (Gast)


Lesenswert?

Nachtrag: Das gilt nicht nur für den Handshake, sondern für alle 
TCP-Pakete, die vom AVR gesendet werden.

von g457 (Gast)


Lesenswert?

Korrektur:
> Genauer: Die Header-Länge (HLEN) stimmt nicht. In deinem PCAP-File steht
> da 0x80.

Jepp.

> Das ist die Länge in Bytes.

Nope, das ist die Länge in 32-Bit-Wörtern. 8 *32Bit == 32 Bytes. Passt.

> Dort müsste aber die Länge in 32-Bit Wörtern stehen.

Tut sie.

> Das wäre dann 0x20.

Nope. 0x20 wären 2 32-Bit-Wörter (und das wäre laut Speck zu kurz, die 
verlangt afair mindestens 5 32-Bit-Wörter).

> Dass die Seite im einem anderen Browser angezeit wird, könnte daran
> liegen, dass dieser fehlertolleranter ist.

Nope, das liegt daran dass beim Chrome (bzw. dem darunterliegenden 
TCP-Stack) erst gar keine Verbindung zustande kommt, bei der Konkurrenz 
(bzw. dessen TCP-Stack) aber schon.

> Ich würde sagen, derjenige, der den TCP-Stack geschrieben hat, hat Mist
> gemacht

Das vermute ich auch.

Laufen der Chrome und der IE eigentlich auf der selben Plattform?

HTH und nix für ungut.

von heinzhorst (Gast)


Lesenswert?

g457 schrieb:
> Nope, das ist die Länge in 32-Bit-Wörtern. 8 *32Bit == 32 Bytes. Passt.

Hast Recht. Ist mir auch gerade aufgefallen, dass HLEN nur aus dem 
oberen Nibble besteht.

von Jurik (Gast)


Lesenswert?

der Chrome und der IE laufen auf gleiche rechner

von holger (Gast)


Lesenswert?

>ich habe klein Webserver gebaut mit Atmega32 und ENC28j60.

Welchen?

>der Chrome und der IE laufen auf gleiche rechner

Was sagt Firefox dazu;)

von Jurik (Gast)


Lesenswert?

Das Firefox hab ich nicht

von Uwe N. (ulegan)


Lesenswert?

Blöde Frage:
Um welchen TCP/IP-Stack handelt es sich eigentlich ?
Ist es der originale vom NetIO, oder OpenMCP, oder der von Ulrich Radig?
Das wurde im ganzen Thread nicht wirklich genannt.

von Purzel H. (hacky)


Lesenswert?

Wahrscheinlich selbst ein paar Zeilen mit wenig Ahnung 
zusammengekloppt...

von heinzhorst (Gast)


Lesenswert?

Dekad Oschi schrieb:
> Wahrscheinlich selbst ein paar Zeilen mit wenig Ahnung
>
> zusammengekloppt...

Wohl kaum. Nun sei nicht gleich so negativ. Btw.: Hast du schon mal 
einen TCP-Stack geschrieben? Benutzt? Nein? Dachte ich mir.

von Purzel H. (hacky)


Lesenswert?

>Wohl kaum. Nun sei nicht gleich so negativ. Btw.: Hast du schon mal
einen TCP-Stack geschrieben? Benutzt? Nein? Dachte ich mir.

Ich hab einen Webserver fuer einen AVR ohne Stack geschrieben...

von Jurik (Gast)


Lesenswert?

TCP Stack aleine zu schreiben ist fast wie Selbsmord!!
Keine Annung von wem der Stack ist, aber ihr habt recht!

Es lag an Kopflänge!!!
IE sendet Header mit 62 Byte, aber Chrome sendet Header mit 66 Byte.

Im Stack wurde 62 Byte fest!
Ich habe auf 66 Byte geändert.
Jetzt geht mit Chrome und mit IE einwandfrei.
DANKE für Tip!!!!
Ihr seit SUPER!!!

Jetzt suche ich weiter, warum Safari von IPhone geht nicht.

ich habe festgestellt, das AVR antwortet auf Reply nicht.
IE senden wieder Header mit 42 Byte, Safari mit 60.

von g457 (Gast)


Lesenswert?

> Im Stack wurde 62 Byte fest!

Das ist extrem pöse. Auch wenn man auf vieles verzichen kann (bzw. muss) 
auf einem 8bitter, die Headerlänge prüfen ist absolut unvermeidbar - wie 
man sieht :-) Am besten gleich mal einen Käferbericht filen.

HTH

von holger (Gast)


Lesenswert?

>Keine Annung von wem der Stack ist, aber ihr habt recht!

Zeig doch mal den Code, dann finden wir das ganz schnell raus;)

von Jurik (Gast)


Angehängte Dateien:

Lesenswert?

Achtung Bascom!

von heinzhorst (Gast)


Lesenswert?

Dekad Oschi schrieb:
> Ich hab einen Webserver fuer einen AVR ohne Stack geschrieben...

Autsch! Wollte mich gerade fachlich mit dir duellieren. Aber wie ich 
sehe, bist du unbewaffnet.

von Jurik (Gast)


Lesenswert?

Das commt von PC:

FF FF FF FF FF FF 40 A6 D9 80 49 10 08 06 00 01 08 00 06 04 00 01 40 A6 
D9 80 49 10 C0 A8 00 19 00 00 00 00 00 00 C0 A8 00 46 00 00 00 00 00 00 
00 00 00 00 DD 09 00 10 66 7A FD C3

Das commt von Safari:

FF FF FF FF FF FF 40 A6 D9 80 49 10 08 06 00 01 08 00 06 04 00 01 40 A6 
D9 80 49 10 C0 A8 00 19 00 00 00 00 00 00 C0 A8 00 46 00 00 00 00 00 00 
00 00 00 00 DD 09 00 10 66 7A FD C3

von Jurik (Gast)


Lesenswert?

Korigire:
Von PC:

FF FF FF FF FF FF 00 0E A6 70 1D 0F 08 06 00 01 08 00 06 04 00 01 00 0E 
A6 70 1D 0F C0 A8 00 02 00 00 00 00 00 00 C0 A8 00 46

Eben nur 42 byte

von holger (Gast)


Lesenswert?

>Zeig doch mal den Code, dann finden wir das ganz schnell raus;)

>Achtung Bascom!

Da hab ich den Mund wohl zu voll genommen;)
Und tschüß.

von Purzel H. (hacky)


Lesenswert?

>Autor: heinzhorst (Gast)
>>Dekad Oschi schrieb:
>> Ich hab einen Webserver fuer einen AVR ohne Stack geschrieben...
>>
>Autsch! Wollte mich gerade fachlich mit dir duellieren. Aber wie ich
>sehe, bist du unbewaffnet.

Ich weiss zumindest genau wie so ein Packet ausieht, wie ein HTTP-Get 
aussieht und wie die Reply aussehen muss. Es gibt Stellen, da muessen 2 
* CR+LF hin. Und ich hab'n Bootloader geschrieben, der konnte ab einem 
Server laden.

von Volker (Gast)


Lesenswert?

@Jurik

>TCP Stack aleine zu schreiben ist fast wie Selbsmord!!
>Keine Annung von wem der Stack ist, aber ihr habt recht!

Steht doch im Code :-)


>FF FF FF FF FF FF 00 0E A6 70 1D 0F 08 06 00 01 08 00 06 04 00 01 00 0E
>A6 70 1D 0F C0 A8 00 02 00 00 00 00 00 00 C0 A8 00 46

Das scheint nur ein ARP-Request zu sein.


Vielleicht probierst du mal eine andere Software z.B. die vom 
ethersex-Projekt.


Volker

von Simon K. (simon) Benutzerseite


Lesenswert?

Dekad Oschi schrieb:
>>Autor: heinzhorst (Gast)
>>>Dekad Oschi schrieb:
>>> Ich hab einen Webserver fuer einen AVR ohne Stack geschrieben...
>>>
>>Autsch! Wollte mich gerade fachlich mit dir duellieren. Aber wie ich
>>sehe, bist du unbewaffnet.
>
> Ich weiss zumindest genau wie so ein Packet ausieht, wie ein HTTP-Get
> aussieht und wie die Reply aussehen muss. Es gibt Stellen, da muessen 2
> * CR+LF hin. Und ich hab'n Bootloader geschrieben, der konnte ab einem
> Server laden.

Dann hast du wohl eher einen HTTP-Client geschrieben.
Einen HTTP-Server ohne Stack zu schreiben ist meiner Meinung nach 
unsinnig. Da hat man dann nicht mal TCP-Sessions (also nur eine 
Verbindung gleichzeitig) oder TCP-Retransmissions bei Fehlern.

von Purzel H. (hacky)


Lesenswert?

Nee. Es war ein Server auch wenn der Bootloader auf einen Server 
zugreift. Der Benutzer sah immer die Webseite des Devices auf seinem PC. 
Die Kommunikation war nicht ueber TCP/IP, sondern uber serial. Sessions 
gab's auch nicht, nur eine zustandslose resp verbindungslose 
Kommunikation. Dann gibt's auch nur einen Client aufs Mal der was will.

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.