<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Daten über ethernet empfangen und von SQL-Datenbank abholen lassen]]></title><description><![CDATA[<p>Hallo an alle!</p>
<p>Ich habe folgendes Problem. Ich soll sämtlichen Inhalt eines Protokolls an einem PC aufnhemen und die Daten entweder direkt in eien SQL-Datenbank schreiben oder eben in irgendeiner Form dieser zur Verfügung stellen. Der 2. Teil sollte kein Problem darstellen.<br />
Mein Problem ist, wie komme ich an die ethernet Daten ran? Wäre es ein File welcher Art auch immer, wäre das weniger ein Problem, aber so fhelt mir momentan jegliche Idee.<br />
Vorgabe ist, dass alles mit C++ programmiert wird und dann eben in eine SQL-Server 2005 Datenbank geschrieben wird. Protokollauslese-Tools sind also nicht geünscht, sondern ich soll eben einen C++ Code schreiben, der die Daten von der ethernet Schnittstelle aufnimmt.<br />
Vielen Dank shconmal für jede Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301865/daten-über-ethernet-empfangen-und-von-sql-datenbank-abholen-lassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 19:50:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301865.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Apr 2012 11:50:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Thu, 05 Apr 2012 11:50:32 GMT]]></title><description><![CDATA[<p>Hallo an alle!</p>
<p>Ich habe folgendes Problem. Ich soll sämtlichen Inhalt eines Protokolls an einem PC aufnhemen und die Daten entweder direkt in eien SQL-Datenbank schreiben oder eben in irgendeiner Form dieser zur Verfügung stellen. Der 2. Teil sollte kein Problem darstellen.<br />
Mein Problem ist, wie komme ich an die ethernet Daten ran? Wäre es ein File welcher Art auch immer, wäre das weniger ein Problem, aber so fhelt mir momentan jegliche Idee.<br />
Vorgabe ist, dass alles mit C++ programmiert wird und dann eben in eine SQL-Server 2005 Datenbank geschrieben wird. Protokollauslese-Tools sind also nicht geünscht, sondern ich soll eben einen C++ Code schreiben, der die Daten von der ethernet Schnittstelle aufnimmt.<br />
Vielen Dank shconmal für jede Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199003</guid><dc:creator><![CDATA[Johannes40481]]></dc:creator><pubDate>Thu, 05 Apr 2012 11:50:32 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Thu, 12 Apr 2012 13:55:50 GMT]]></title><description><![CDATA[<p>Keiner ein Ahnung?</p>
<p>Also geht in erster Linie wirklich nur darum, einen Datenstrom der über ethernet ankommt zu empfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201200</guid><dc:creator><![CDATA[Johannes40481]]></dc:creator><pubDate>Thu, 12 Apr 2012 13:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Thu, 12 Apr 2012 14:49:56 GMT]]></title><description><![CDATA[<p>Also etwas konkreter musst du schon werden. <strong>Welche</strong> Daten kommen denn überhaupt am PC an? Sollst du nur die Telegramme loggen, die an einem bestimmten Port anfallen, oder sollst du den gesamten Ethernet Traffic des PCs loggen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201217</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 12 Apr 2012 14:49:56 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Thu, 12 Apr 2012 16:58:20 GMT]]></title><description><![CDATA[<p>außerdem, für welchen os? das kann man nämlich nicht mit standard mittteln machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201258</guid><dc:creator><![CDATA[vario-500]]></dc:creator><pubDate>Thu, 12 Apr 2012 16:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 01:05:51 GMT]]></title><description><![CDATA[<p>Was für &quot;ethernet Daten&quot;? Willst/sollst du die rohen Ethernet-Frames abfangen und abspeichern?<br />
Dafür gibt es zumindest unter Windows keine direkte Schnittstelle. Bin mir nichtmal sicher ob das mit Hilfstreibern ala WinPCap geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201401</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 13 Apr 2012 01:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 08:14:52 GMT]]></title><description><![CDATA[<p>Okay, hier die fehlenden Infos:</p>
<p>Es sind Positionsdaten, die ein einem selbstentwickelten (nicht von mir) Protokoll gesendet werden, was bis einschließlich Layer5 ethernet ist, also auf TCP und IP dann aufbaut. Darin steht z.b. Fritz hat Position 6.<br />
Die Daten dann in die Datenbank zu sortieren ist kein Problem, aber ich muss ja erstmal die Daten von der Netzwerkarte irgendwie herholen.</p>
<p>Habe mittelgute C++ und SQLDeveloper Erfahrungen, aber keinen Schimmer, wie ich bei dem Problem starten soll. Wären die Daten in einer Datei (CSV o.ä.) wäre das ja kein Problem, sowas lernt man im Studium, aber wie man an Daten die nicht in einer Datei sind rankommt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201453</guid><dc:creator><![CDATA[Johannes40481]]></dc:creator><pubDate>Fri, 13 Apr 2012 08:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 09:42:23 GMT]]></title><description><![CDATA[<p>Netzwerkkarte ansteuern ist hochgradig betriebssystemabhängig. Welches System?</p>
<p><s>Wenn ich dich recht verstehe, willst du sogar irgendwo in die untersten Ebenen des Netzwerkprotokolls eingreifen. Ich wäre mir nicht so sicher, ob das überhaupt möglich ist, ohne einen eigenen Treiber zu schreiben</s>. edit: Nein, das wolltest du wohl doch nicht. Wieso nicht einfach so etwas wie Boost ASIO? Dann hast du die betriebssystemabhängigkeit sogar weggekapselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201514</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Apr 2012 09:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 09:46:09 GMT]]></title><description><![CDATA[<p>Nein, das hilft immer noch kein Stück weiter.</p>
<p>Bitte beschreib´ doch mal die aktuelle Situation, insbesondere wie die Kommunikation aussieht und wo dein Logger steht. Soll dein Logger die Kommunikation selbst abwickeln oder eine fremde Verbindung belauschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201519</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 13 Apr 2012 09:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 10:07:56 GMT]]></title><description><![CDATA[<p>TCP/IP ist in Unterschied zu UDP ein bidirektionales Protokoll. Das bedeutet bevor ein Rechner irgendwas senden/empfangen kann muss die Verbindung schon stehen ;). Also muss ein Prozess/Rechner darauf warten bis der von dem anderen die Anfrage bekommt usw.<br />
Stichwort Sockets..<br />
Dort wirst Du deine Daten finden..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201531</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Fri, 13 Apr 2012 10:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 21:20:38 GMT]]></title><description><![CDATA[<p>Johannes40481 schrieb:</p>
<blockquote>
<p>die ein einem selbstentwickelten (nicht von mir) Protokoll gesendet werden, was bis einschließlich Layer5 ethernet ist, also auf TCP und IP dann aufbaut.</p>
</blockquote>
<p>Ethernet betrifft Layer 1 und 2, Layer 3-5 haben mit Ethernet nichts zu tun.</p>
<p>OK, es handelt sich also um TCP/IP, das wäre die relevante Info gewesen. Ist auch keine Überraschung, ist ja auch bloss das meist verwendetste L5 Protokoll.</p>
<p>TCP/IP Connections kannst du mit den sog. Socket-Funktionen machen. connect, accept, recv, send etc.<br />
Oder eben etwas wie Boost.ASIO verwenden, was die Funktionalität in mehr oder weniger einfach zu verwendende C++ Klassen einwickelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201815</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 13 Apr 2012 21:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Fri, 13 Apr 2012 23:47:19 GMT]]></title><description><![CDATA[<p>IP arbeitet auf Layer 3 und TCP auf Layer 4. Mit Layer 5 hat das wenig zu tun. Just sayin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201830</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 13 Apr 2012 23:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Sat, 14 Apr 2012 02:22:58 GMT]]></title><description><![CDATA[<p>UDP ist klar L4.</p>
<p>TCP passt nicht so ganz ins OSI Modell, weil es Layer 4 und Teile von 5 übernimmt. Wobei es sehr oft der Fall ist, dass die nicht von TCP implementierten L5 Features einfach gar nicht verwendet werden, oder in L7 implementiert werden.</p>
<p>Guckst du hier:<br />
<a href="http://en.wikipedia.org/wiki/OSI_model#Examples" rel="nofollow">http://en.wikipedia.org/wiki/OSI_model#Examples</a></p>
<p>Heisst: in L5 ist in vielen Fällen &quot;nix&quot; ausser TCP, daher bezeichne ich TCP als L5 Protokoll.</p>
<p>Wobei es wohl üblicher ist TCP als L4 Protokoll zu bezeichnen - auch wenn ich das nicht ganz nachvollziehen kann. Vielleicht L4/5?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201837</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 14 Apr 2012 02:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Sat, 14 Apr 2012 06:39:19 GMT]]></title><description><![CDATA[<p>Hier ist nochmal ein Link allgemein über die Infrastruktur von Netzwerk Programmierung<br />
<a href="http://www.phoenixcontact.de/local_content_pdf/pdf_eng/Ethernet_Basics_rev2_de.pdf" rel="nofollow">http://www.phoenixcontact.de/local_content_pdf/pdf_eng/Ethernet_Basics_rev2_de.pdf</a><br />
Falss du Linux benutzt könntest du dich außerdem mit RAW-Sockets befassen. Das sähe dann z.b. so aus:</p>
<pre><code class="language-cpp">sock = socket(AF_INET,SOCK_PACKET,htons(ETH_P_ARP));
</code></pre>
<p>SOCK_PACKET steht dafür ,dass man auf Ethernet Ebene Aufbaut. Achtung man darf RAW_SOCKETS nur als Administrator erstellen sonst schlägt socket() fehl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201842</guid><dc:creator><![CDATA[Dezimiert]]></dc:creator><pubDate>Sat, 14 Apr 2012 06:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 16 Apr 2012 06:19:56 GMT]]></title><description><![CDATA[<p>Vielen Dank der Infos! Das hilft mir sehr weiter, denke ich, muss ich nochmals genauer studieren!</p>
<p>Und das ethernet Layer 1&amp;2 kennzeichnet, IP Layer3 und TCP Layer4 war mir bewusst, aber man verstand (zum Glück) auch so was ich meinte.</p>
<p>Und die Verbindung will ich nur belauschen, ich häng nur mit einer Art Tap dazwischen. Die beiden Controller die miteinander kommunizieren haben ebenfalls ein selbstentwickeltes Betriebssystem (was ja egal sein sollte) und der PC mit dem ich zuhören will muss Windows XP haben.</p>
<p>Ich danke nochmals, werde erstmal eure ganzen Infos anschauen und verdauen und mich ggf. nochmals melden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202388</guid><dc:creator><![CDATA[Johannes40481]]></dc:creator><pubDate>Mon, 16 Apr 2012 06:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 16 Apr 2012 11:18:05 GMT]]></title><description><![CDATA[<p>Johannes40481 schrieb:</p>
<blockquote>
<p>Und das ethernet Layer 1&amp;2 kennzeichnet, IP Layer3 und TCP Layer4 war mir bewusst, aber man verstand (zum Glück) auch so was ich meinte.</p>
</blockquote>
<p>Nein, war überhaupt nicht klar.</p>
<p>Wird sowieso jetzt erst klar, nachdem du schreibst...</p>
<blockquote>
<p>Und die Verbindung will ich nur belauschen, ich häng nur mit einer Art Tap dazwischen. Die beiden Controller die miteinander kommunizieren haben ebenfalls ein selbstentwickeltes Betriebssystem (was ja egal sein sollte) und der PC mit dem ich zuhören will muss Windows XP haben.</p>
</blockquote>
<p>Ach, das wäre aber auch ne wichtige Info gewesen.<br />
Dann musst du erstmal deine Netzwerkkarte wo du &quot;mitlauschen&quot; willst in den &quot;promiscuous&quot; Mode schalten, sonst wirst du nämlich von dem was die zwei Controller miteinander plauschen nix mitbekommen.<br />
Und du brauchst einen Hilfstreiber der Pakete capturen kann, wie eben WinPCap.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202450</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 16 Apr 2012 11:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 16 Apr 2012 11:25:22 GMT]]></title><description><![CDATA[<p>Und wenn du hinter einem Switch sitzt muss der Switch den Port ebenfalls in den Promiscuous Modus schalten, sonst bekommste nur Pakete, die an dich adressiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202457</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 16 Apr 2012 11:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 16 Apr 2012 12:15:28 GMT]]></title><description><![CDATA[<p>okay... tut mir Leid... bin noch im blutigen Anfängerstatus!</p>
<p>Und promiscuous-Mode weiß ich, brauch eh eine Karte mnit 2 Netzwerkanschlüssen, da der Netzwerk Tap (vermutlich ein Netoptics TP-CU) das Signal auf Tx und Rx auftrennt und je an eine Leitung al Rx weitergibt. Macht auch die Auswertung der Datenrichtung einfacher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202482</guid><dc:creator><![CDATA[Johannes40481]]></dc:creator><pubDate>Mon, 16 Apr 2012 12:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 16 Apr 2012 13:33:38 GMT]]></title><description><![CDATA[<p>Na dann ist das ganze doch garnicht sooo schwierig... mit <a href="http://www.winpcap.org/" rel="nofollow">WinPCap</a> solltest du das eigentlich lösen können. Die API ist inzwischen ziemlich komfortabel, dazu braucht man nur etwas mehr als C/C++ Anfängerwissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202505</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 16 Apr 2012 13:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Sun, 29 Jul 2012 11:58:28 GMT]]></title><description><![CDATA[<p>Habe nun mit der WinPcap einige geschafft, dank ver Tutorials, allerdings nun einen Fehler, den ich nicht beseitigt bekomme. Umgebung ist immernoch WinXp und Visual Studio 2008.</p>
<pre><code>#include &lt;pcap.h&gt;
#include &lt;winsock2.h&gt;

#include &lt;Tchar.h&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

using namespace std;

// default snap length (maximum bytes per packet to capture)
#define SNAP_LEN 1518

// ethernet headers are always exactly 14 bytes
#define SIZE_ETHERNET 14

// Ethernet addresses are 6 bytes
#define ETHER_ADDR_LEN	6

// Ethernet header
struct sniff_ethernet {
	u_char ether_dhost[ETHER_ADDR_LEN]; // Destination host address 
	u_char ether_shost[ETHER_ADDR_LEN]; // Source host address 
	u_short ether_type;					// IP? ARP? RARP? etc 
};

// IP header 
struct sniff_ip {
	u_char ip_vhl;				// version &lt;&lt; 4 | header length &gt;&gt; 2 
	u_char ip_tos;				// type of service 
	u_short ip_len;				// total length 
	u_short ip_id;				// identification 
	u_short ip_off;				// fragment offset field 
#define IP_RF 0x8000			// reserved fragment flag 
#define IP_DF 0x4000			// dont fragment flag 
#define IP_MF 0x2000			// more fragments flag 
#define IP_OFFMASK 0x1fff		// mask for fragmenting bits 
	u_char ip_ttl;				// time to live 
	u_char ip_p;				// protocol 
	u_short ip_sum;				// checksum 
	struct in_addr ip_src,ip_dst;	// source and dest address 
};
#define IP_HL(ip)		(((ip)-&gt;ip_vhl) &amp; 0x0f)
#define IP_V(ip)		(((ip)-&gt;ip_vhl) &gt;&gt; 4)

//TCP header 
struct sniff_tcp {
	u_short th_sport;	// source port 
	u_short th_dport;	// destination port 
	//tcp_seq th_seq;	// sequence number 
	//tcp_seq th_ack;	// acknowledgement number 

	u_char th_offx2;	// data offset, rsvd 
#define TH_OFF(th)	(((th)-&gt;th_offx2 &amp; 0xf0) &gt;&gt; 4)
	u_char th_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
	u_short th_win;		// window 
	u_short th_sum;		// checksum 
	u_short th_urp;		// urgent pointer 
};

// ethernet headers are always exactly 14 bytes 
#define SIZE_ETHERNET 14

struct sniff_ethernet *ethernet;	// The ethernet header 
struct sniff_ip *ip;				// The IP header 
struct sniff_tcp *tcp;				// The TCP header 
u_char *payload;					// Packet payload 

u_int size_ip;
u_int size_tcp;

// print payload in ascii signs
void print_hex_ascii_line(const u_char *payload, int len, int offset)
{
	int i;
	int gap;
	const u_char *ch;

	// offset
	printf(&quot;%05d   &quot;, offset);

	// hex
	ch = payload;
	for(i = 0; i &lt; len; i++) {
		printf(&quot;%02x &quot;, *ch);
		ch++;
		// print extra space after 8th byte for visual aid
		if (i == 7)
			printf(&quot; &quot;);
	}
	//print space to handle line less than 8 bytes
	if (len &lt; 8)
		printf(&quot; &quot;);

	//fill hex gap with spaces if not full line
	if (len &lt; 16) {
		gap = 16 - len;
		for (i = 0; i &lt; gap; i++) {
			printf(&quot;   &quot;);
		}
	}
	printf(&quot;   &quot;);

	// ascii (if printable)
	ch = payload;
	for(i = 0; i &lt; len; i++) {
		if (isprint(*ch))
			printf(&quot;%c&quot;, *ch);
		else
			printf(&quot;.&quot;);
		ch++;
	}

	printf(&quot;\n&quot;);

return;
}

// print the TCP payload
void print_payload(const u_char *payload, int len)
{

	int len_rem = len;
	int line_width = 16;			// number of bytes per line
	int line_len;
	int offset = 0;					// zero-based offset counter
	const u_char *ch = payload;

	if (len &lt;= 0)
		return;

	// data fits on one line
	if (len &lt;= line_width) {
		print_hex_ascii_line(ch, len, offset);
		return;
	}

	// data spans multiple lines
	for ( ;; ) {
		// compute current line length
		line_len = line_width % len_rem;
		// print line
		print_hex_ascii_line(ch, line_len, offset);
		// compute total remaining
		len_rem = len_rem - line_len;
		// shift pointer to remaining bytes to print
		ch = ch + line_len;
		// add offset
		offset = offset + line_width;
		// check if we have line width chars or less
		if (len_rem &lt;= line_width) {
			// print last line and get out
			print_hex_ascii_line(ch, len_rem, offset);
			break;
		}
	}

return;
}

void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{

	static int count = 1;                   // packet counter

	// declare pointers to packet headers
	const struct sniff_ethernet *ethernet;  // The ethernet header
	const struct sniff_ip *ip;              // The IP header
	const struct sniff_tcp *tcp;            // The TCP header
	u_char *payload;						// Packet payload

	int size_ip;
	int size_tcp;
	int size_payload;

	printf(&quot;\nPacket number %d:\n&quot;, count);
	count++;

	// define ethernet header
	ethernet = (struct sniff_ethernet*)(packet);

	// define/compute ip header offset
	ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
	size_ip = IP_HL(ip)*4;
	if (size_ip &lt; 20) {
		printf(&quot;   * Invalid IP header length: %u bytes\n&quot;, size_ip);
		return;
	}
	printf(&quot;    From: %s\n&quot;, inet_ntoa(ip-&gt;ip_src));
	printf(&quot;      To: %s\n&quot;, inet_ntoa(ip-&gt;ip_dst));

	// determine protocol	
	switch(ip-&gt;ip_p) {
		case IPPROTO_TCP:
			printf(&quot;   Protocol: TCP\n&quot;);
			break;
		case IPPROTO_UDP:
			printf(&quot;   Protocol: UDP\n&quot;);
			return;
		case IPPROTO_ICMP:
			printf(&quot;   Protocol: ICMP\n&quot;);
			return;
		case IPPROTO_IP:
			printf(&quot;   Protocol: IP\n&quot;);
			return;
		default:
			printf(&quot;   Protocol: unknown\n&quot;);
			return;
	}

	// define/compute tcp header offset
	tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);
	size_tcp = TH_OFF(tcp)*4;
	if (size_tcp &lt; 20) {
		printf(&quot;   * Invalid TCP header length: %u bytes\n&quot;, size_tcp);
		return;
	}	
	printf(&quot;   Src port: %d\n&quot;, ntohs(tcp-&gt;th_sport));
	printf(&quot;   Dst port: %d\n&quot;, ntohs(tcp-&gt;th_dport));

	// define/compute tcp payload (segment) offset
	payload = (u_char*) (packet + SIZE_ETHERNET + size_ip + size_tcp); // &lt;--- hier Fehler-------------------------------------------------------------------
	//-------------------------------------------------------------------------------------------------------------------------------------------------------

	// compute tcp payload (segment) size
	size_payload = ntohs(ip-&gt;ip_len) - (size_ip + size_tcp);

	// Print payload data; it might be binary, so don't just treat it as a string.
	if (size_payload &gt; 0) {
		printf(&quot;   Payload (%d bytes):\n&quot;, size_payload);
		print_payload(payload, size_payload);
	}
return;
}

// main programm
int _tmain(int argc, _TCHAR* argv[])
{
    pcap_if_t * allAdapters;						// output device, all
    pcap_if_t * adapter;							// selected output device
    pcap_t * adapterHandle;							// packet capture handle 
    char errorBuffer[ PCAP_ERRBUF_SIZE ];			// error buffer

	unsigned int netmask = 0xffffff;				// netmask to recieve from all IPs
	char packet_filter[] = &quot;tcp port 5055&quot;;			// Filter set to TCP Port 5055 for SCIP
	struct bpf_program filtercode;					// compiled filter version
	int num_packets = -1;							// number of packets to capture, set negative for endless

//--------------------------------------------------------------------------
    // retrieve the adapters from the computer
	// you can choose which adapter you want to use
	// also Filter for Port 5055 (can be changed above) is set here, to keep traffic as low as possible

    if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, 
            &amp;allAdapters, errorBuffer ) == -1 )
    {
        fprintf( stderr, &quot;Error in pcap_findalldevs_ex function: %s\n&quot;, errorBuffer );
        return -1;
    }

    // if there are no adapters, print an error
    if( allAdapters == NULL )
    {
    printf( &quot;\nNo adapters found! Make sure WinPcap is installed.\n&quot; );
        return 0;
    }

    // print the list of adapters along with basic information about an adapter
    int crtAdapter = 0;
    for( adapter = allAdapters; adapter != NULL; adapter = adapter-&gt;next)
    {
    printf( &quot;\n%d.%s &quot;, ++crtAdapter, adapter-&gt;name );
    printf( &quot;-- %s\n&quot;, adapter-&gt;description );
    }

    printf( &quot;\n&quot; );

    int adapterNumber;
	// select an adapter
    printf( &quot;Enter the adapter number between 1 and %d:&quot;, crtAdapter );
    scanf_s( &quot;%d&quot;, &amp;adapterNumber );

    if( adapterNumber &lt; 1 || adapterNumber &gt; crtAdapter )
    {
        printf( &quot;\nAdapter number out of range.\n&quot; );

        // Free the adapter list
        pcap_freealldevs( allAdapters );

        return -1;
    }

    // parse the list until we reach the desired adapter
    adapter = allAdapters;
    for( crtAdapter = 0; crtAdapter &lt; adapterNumber - 1; crtAdapter++ )
    adapter = adapter-&gt;next;

	// open the adapter with promiscous mode enabled
    adapterHandle = pcap_open( adapter-&gt;name,	// name of the adapter
                               65536,			// portion of the packet to capture
												// 65536 guarantees that the whole
												// packet will be captured
                               PCAP_OPENFLAG_PROMISCUOUS,	// promiscuous mode
                               1000,            // read timeout - 1 millisecond
                               NULL,			// authentication on the remote machine
                               errorBuffer		// error buffer
                              );

    if( adapterHandle == NULL )
    {
        fprintf( stderr, &quot;\nUnable to open the adapter\n&quot;, adapter-&gt;name );

	// Check the link layer. We support only Ethernet for simplicity.
    if(pcap_datalink(adapterHandle) != DLT_EN10MB)
    {
        fprintf(stderr,&quot;\nThis program works only on Ethernet networks.\n&quot;);
        // Free the device list
        pcap_freealldevs(allAdapters);
        return -1;
    }

	// compile the filter
	if (pcap_compile(adapterHandle, &amp;filtercode, packet_filter, 1, netmask) &gt; 0)
	{
		cout&lt;&lt;endl&lt;&lt;&quot;Unable to compile the packet filter. Check Syntax!&quot;&lt;&lt;endl;
		pcap_freealldevs(allAdapters);
		return -1;
	}

	// setting the filter
	if (pcap_setfilter(adapterHandle, &amp;filtercode) &gt; 0)
	{
		cout&lt;&lt;endl&lt;&lt;&quot;Error setting filter!&quot;&lt;&lt;endl;
		pcap_freealldevs(allAdapters);
		return -1;
	}
        // Free the adapter list
        pcap_freealldevs( allAdapters );
        return -1;
    }

    printf( &quot;\nCapture session started on  adapter %s...\n&quot;, adapter-&gt;name );

    // free the adapter list
    pcap_freealldevs( allAdapters );

//--------------------------------------------------------------------------
    // this is the most important part of the application
    // here we start receiving packet traffic
// then save information inside the packet into array or somethign like that

	pcap_loop(adapterHandle, num_packets, got_packet, NULL);

	// cleanup variables
	pcap_freecode(&amp;filtercode);
	pcap_close(adapterHandle);

    system( &quot;PAUSE&quot; );
    return 0;
}
</code></pre>
<p>Ich möchte eben den payload aus dem TCP als Ascii Zeichen Kette haben und dann weiterverarbeiten. Die Weiterverarbeitung hätte ich auch funktionierend, aber bekomme an der einen Stelle, zum lokalisieren des Payload, also der Psotition im ethernet frame immer wieder einen Fehler, den ich nicht beseitigen kann.<br />
Ist auch Code makriert wo!<br />
In der Version wie oben, wo ich versuche explizit des Datenformat zu ändern, meckert, er das es 2 unaufgelöste externe Symbole gibt, und zwar innerhalb der got_packet funktion, wo genau, sagt er nicht.<br />
Lass ich das Wandeln weg, funktioniert es nicht, da er ein const u_cahr* nicht in ein u_char* wandeln kann. Klar, deswegen wollte ich es ja wandeln... der Grund ist, dass die pcap das als const erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236597</guid><dc:creator><![CDATA[Johannes 40481]]></dc:creator><pubDate>Sun, 29 Jul 2012 11:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 30 Jul 2012 11:26:54 GMT]]></title><description><![CDATA[<p>Bitte gewöhn´ dir an, präzise Fehlerbeschreibung zu liefern. Aussagen wie &quot;immer noch einen Fehler, den ich nicht beseitigen kann&quot; enthalten keine Informationen, die irgendwie zur Problemlösung beitragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236854</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 30 Jul 2012 11:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Daten über ethernet empfangen und von SQL-Datenbank abholen lassen on Mon, 30 Jul 2012 12:13:32 GMT]]></title><description><![CDATA[<p>zum winsock2.h muss auch die entsprechende library Ws2_32.lib eingebunden werden!</p>
<pre><code>#pragma comment (lib, &quot;Ws2_32.lib&quot;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2236866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236866</guid><dc:creator><![CDATA[jo40481]]></dc:creator><pubDate>Mon, 30 Jul 2012 12:13:32 GMT</pubDate></item></channel></rss>