Ethernet Frames mit Wireshark aufzeichnen

Gast #2258026
Lesenswert?

Hallo,

ich besitze ein Evaluationsboard von Hitex (STR9 COM Stick). Nun bin ich 
dabei einen reinen Ethernet Frame zusenden und mit WIreshark möchte ich 
diesen Ethernt Frame empfangen und analysieren. Was müsste ich genau 
tun, damit ich auf der Mikrocontrollerseite einen Ethernet Frame senden 
kann bzw. was müsste ich auf der PC Seite genau tun, damit ich mit 
Wireshark Ethernet Frames sehen kann?

Im Prinzip läuft die Ethernetkommunikation bei mir in einer while(1) 
Schleife in der uIPMain Funktion ab. Hier müsste ich quasi die Funktion 
TransmitPacket() permanent aufrufen. Leider sehe ich in Wireshark nichts 
sinnvolles.

Kann mir jemand bei meinem Problem helfen ?
Angehängte Dateien:
Gast #2258186
Lesenswert?

Wie ist denn dein µC mit dem PC verbunden? Wenn da z.B. ein Switch 
dazwischen hängt, wird der das wahrscheinlich nur dann weiterleiten, 
wenn die Ziel-MAC-Adresse die des Rechners oder die Broadcast-Adresse 
ist.
Gast #2258693
Lesenswert?

Oktav Oschi schrieb:
> Moeglicherweise nicht. Moeglicherweise sendet der PC nichts ohne
> vorherige Verbindungsaufnahme

Ein Verbindungsaufbau wie bei TCP sind auch Packete, die ich sehen kann.

Wenn ich, mit welchem Programm auch immer, ein UDP Packet losschicke, 
und die Route zeigt auf das richtige Interface, geht das Packet raus. 
Und alles, was an diesem Interface ankommt, wird von wireshark 
angezeigt, solange es auch nur einigermassen ethernetkonform ist. 
Wichtig ist, das wireshark auch am richtigen Interface lauscht.

MfG Klaus
Gast #2258985
Lesenswert?

Vielen Dank für eure Unterstützung. Ich möchte eigentlich nur ein reines 
Ethernet Packet (ohne TCP oder UDP) via Crossoverkabel vom 
Mikrocontroller an den PC senden. Reciht es da eigentlich, nur die 
Funktion "TransmitPacket()" auszuführen ?
Gast #2259026
Lesenswert?

Ich kann doch in der TransmitPacket Funktion statt dem Puffer 
"uip_appdata" auch direkt einen Wert übergeben. Dies habe ich auch 
gemacht, leider kann ich auf der PC Seite aus mit WIreshark keine 
plausiblen Daten sehen. Ich sehe irgendwelche anderen Packete mit 
Wireshark.
1
void TransmitPacket(void)
2
{
3
     int i;
4
     u8 data[1500];
5

6
      // Copy the header portion part
7
      for(i=0; i < (UIP_LLH_LEN + 40); ++i) {
8
         data[i] =  uip_buf[i];
9
      }
10

11
      // Copy the data portion part
12
      for(; i < uip_len; ++i) {
13
          data[i] =  uip_appdata[i - UIP_LLH_LEN - 40 ];
14
      }
15

16
      ENET_TxPkt(&data,uip_len);
17
}
Gast #2259029
Lesenswert?

Leo schrieb:
> Leider sehe ich in Wireshark nichts
> sinnvolles.

- Richtiges Interface ausgewählt und promiscuous mode ist aktiviert?
(http://www.wireshark.org/faq.html#q7.6)

- Bevor Du rumzuhacken versuchst, probier einfach ein Beispielcode aus 
um richtige Ergebnisse zu bekommen. Danach arbeite weiter an dein 
Vorhaben.

Leo schrieb:
> Reciht es da eigentlich, nur die
> Funktion "TransmitPacket()" auszuführen ?

- Vllt./vllt. auch nicht. Zu wenig Code um das zu beurteilen
Gast #2259092
Lesenswert?

1
int uIPMain(void)
2
{
3
  u8_t i, arptimer;
4
  uip_eth_hdr *BUF = (uip_eth_hdr*)uip_buf;
5

6
  u32 size;
7

8
  while(1)
9
  {
10
     TransmitPacket();
11
  }
12
}

die Variable "uip_len" muss ich allerdings manuell festlegen.
#2259106
Lesenswert?

Mit diesem Code nimmst du einen leeren unbeschrifteten Briefumschlag, 
steckst ihn so wie er ist in den Briefkasten und wunderst dich, warum 
die Post ihn wegwirft statt ihn deiner Oma zuzustellen. Kein MAC-Header, 
kein IP-Header, kein UDP-Header, kein garnix. Nur Nullen.

Vorausgesetzt natürlich, das TransmitPacket ist nicht auch noch 
auskommentiert, wie im Paket grad eben.
Gast #2259156
Lesenswert?

Ich habs geschafft.
1
void TransmitPacket(void)
2
{
3
      int i;
4
      u8 data[1500];
5
      
6
      for(i=0; i < 6; ++i) 
7
      {
8
         data[i] =  src_MAC[i];
9
      }
10
    
11
      for(i=0; i < 6; ++i) 
12
      {
13
         data[i+6] =  dst_MAC[i];
14
      }
15
    
16
      data[i+13] = 0x08; /* Type */
17
      data[i+14] = 0x00;  
18

19
      
20
      data[i+15] = 0xFF; /* ??? */
21
      data[i+16] = 0xFF;
22
      
23
      for(i=0; i < 50; ++i) 
24
      {
25
         data[i+17] =  0xAA;
26
      } 
27

28
      ENET_TxPkt(&data,66);
29
}

Welchen Typ müsste ich bei mir verwenden?
Wie müsste ich FCS definieren ?
Angehängte Dateien:
#2259165
Lesenswert?

Die Ethernet FCS macht der Adapter/Controller üblicherweise selbst.

In uIP gibt es UDP Support. Zwar nicht unbedingt in der Doku, aber im 
uip.h steht dazu was drin und die Beisiele für DHCP und DNS verwenden 
UDP.

Im Blindflug ganz ohne jede Ahnung von Ethernet/IP/UDP wirds nicht 
gehen. Gibt genug Literatur dazu. Im Netz und auf toten Bäumen.
Gast #2259185
Lesenswert?

Ich weiss schon was mit dem Type gemeint ist. Zum Beispiel für 
Internetworking Protocol (IP) setzt man Type auf 0x0800. Über diesen 
Type kann der Empfänger entscheiden, um was für ein Frame es sich 
handelt.

Jetzt zum UIP Stack. Der UIP Stack ist irgendwie schwer verständlich.
Ein UDP Telegramm zu erzeugen und diesen zu senden, ist für mich nicht 
einleuchtend, wie man da genau vorgehen muss.
#2259192
Lesenswert?

Leo schrieb:

> Ich weiss schon was mit dem Type gemeint ist. Zum Beispiel für
> Internetworking Protocol (IP) setzt man Type auf 0x0800.

Weshalb dann ausgerechnet Novell?

> Jetzt zum UIP Stack. Der UIP Stack ist irgendwie schwer verständlich.
> Ein UDP Telegramm zu erzeugen und diesen zu senden, ist für mich nicht
> einleuchtend, wie man da genau vorgehen muss.

Ich habs nur als Server verwendet und das ist es einfacher, weil alles 
schon drinsteht, nur in verkehrter Reihenfolge.

Deshalb der Tipp mit dem DHCP/DNS-Code. Da ist UDP als Initiator drin.
Gast #2259764
Lesenswert?

Ich fange bei so was umgekehrt an. Ich lass mir vom PC einen Frame 
schicken. Da kann man sich leicht einen gültigen Frame erzeugen lassen, 
z.B. mit Ping oder auch direkt mit C, Perl, VB .. . Und Wenn die Routes 
stimmen (oder Broadcast Ping nehmen) kann man auf dem µC den Frame 
empfangen. Dann hat man schon mal ein Muster für einen gültigen Frame. 
Erster Versuch ist dann, ihn erstmal zurück schicken. Dann sieht man 
schon mal im Wireshark was falsch ist. Daran kann man sich dann 
abarbeiten zusammen mit den entsprechenden RFCs. Und die Network Byte 
Order nicht vergessen, wenns um Werte mit mehr als 8 Bit geht.

MfG Klaus
Gast #2266969
Lesenswert?

Ich aknn nun Ethernet Frames vom Mikrocontroller versenden und auch 
empfangen. Das Senden vom PC mache ich über WinPcap. Das funktioniert 
super.
Jetzt ist es so, dass ich den uip Stack nun einsetzen möchte. Wie kann 
ich nun ein UDP Frame vom Mikrocontroller an den PC versenden ? Für mein 
Evaluationboard habe ich bereits ein lauffähige Webserverapllikation. 
Nach langen Suchen ist mir noch nicht klar wie man mit dem uip Stack UDP 
Frames erteugen und versenden kann. Gibt es hier jemand der sowas 
schonmal gemacht hat ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren