Paketdaten in C# laden - Online Game

karli123456

Newbie
Registriert
März 2014
Beiträge
1
Paketdaten in C# laden - Online Game

Hallo Miteinander.

Bis jetzt sieht es folgender Maßen aus.

Ich habe ein Programm in C# programmiert, wo ich Daten vom Spiel per Hand eingeben kann und dieses Programm mir daraufhin, irgendwelche Berechnungen tätigt. (Genauere muss ich hier nicht ins Detail gehen. Geht um die Main Message)

Die Daten die ich für mein Tool benötige, werden nicht nur im Spiel normal angezeigt, sondern werden auch über Wireshark per TCP teilweise unverschlüsselt übertragen.
(Siehe Anhang)

Ich habe bereits mein Glück mit Wincap versucht, aber dafür reichen meine Programmierkenntnisse nicht aus! :/

MJSniffer sieht da schon etwas besser aus, aber damit sehe ich die Eigenschaften der Datenpakte -Length -Checksum etc. aber nicht die Daten im Detail.

Ein funktionierendes Projekt wäre nice, worin ich mir dann meinen C# Code von meinem TOOL selbst reinprog.

Bitte um Hilfe.
danke
Karli
 

Anhänge

  • C# Wireshark.png
    C# Wireshark.png
    39,4 KB · Aufrufe: 225
Zuletzt bearbeitet:
Ich habe dein Problem nicht richtig verstanden, du willst also in deinem Programm die Datenpakete andere Programme aufzeichnen?
 
Jap so hab ichs auch verstanden. Diese will er dann wohl nutzen um irgendwas zu berechnen, das musste er bisher von Hand eingeben.
 
Du willst nur Sachen per WinPCap sniffen? Also in C# ist es wahrscheinlich nicht sehr einfach, in C(++) geht es einigermaßen flott...

Code:
// winpcap_test.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#define HAVE_REMOTE
#include "pcap.h"
#include <iostream>
//...
#pragma comment (lib,"wpcap.lib")

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	char errbuf[256]={};
	pcap_if_t*dev;
	pcap_t*adapter;
	if(pcap_findalldevs_ex("rpcap://",0,&dev,errbuf)==-1){
		return -1;
	}
	if(!dev){
		return -2;
	}
	adapter=pcap_open(dev->name,65535,PCAP_OPENFLAG_PROMISCUOUS|PCAP_OPENFLAG_NOCAPTURE_LOCAL,10000,0,errbuf);
	if(!adapter){
		return -3;
	}
	for(int i=0;i<1000;++i){
		pcap_pkthdr*phdr;
		const u_char *data;
		int err= pcap_next_ex(adapter,&phdr,&data);
		if(0==err){//timeout
			//return -4;
		}
		else if(err>=1){//Success
			cout<<"received packet: size="<<phdr->len<<"\tcaptured="<<phdr->caplen<<"\tts="<<phdr->ts.tv_sec<<".";
			char f=cout.fill();
			cout.fill('0');
			int w=cout.width();
			cout.width(6);
			cout<<phdr->ts.tv_usec<<"\n";
			cout.fill(f);
			cout.width(w);
		}
		else
		{
			//Read the doc, I don't know, what this means
		}
	}
	//Cleanup
	pcap_close(adapter);
	pcap_freealldevs(dev);
	return 0;
}
Möglicherweise geht es relativ einfach, via PInvoke die paar Funktionen aufzurufen. (Die einzige Struktur, die du direkt ansprichst, ist pcap_pkthdr, die kannst du dir sicherlich nachbauen).
Und dann musst du halt das Ethernet, IP und TCP-Protokoll parsen, dann kommst du an den Inhalt ran.
 
Hancock, da habe ich vor Monaten mal recht aufwendige und gut dokumentierte Libs für .Net gesehen.
 
Zurück
Oben