C++ Auftrag ggn Bezahlung

Hallo,

ich habe für ein Projekt eine Auftragsarbeit zu vergeben.

Es soll in mit Microsoft Visual C++ Express geschrieben werden.
Das "Tool" soll einen SSH Tunnel zu einer MySQL Datenbank im Netz eine Verbindung aufbauen und einen einzelnen Datensatz aus dieser Datenbank holen.
Den Datensatz in einer Variable ablegen zum weiteren verarbeiten.

Wenn weiter Infos gebraucht werden, einfach anschreiben. Bei Interesse Stunden sowie Stundensatz mit angeben, oder Pauschalpreis per Email oder PM.

Grüße,
Mike
 
also mal mit anderen worten:

Anforderung1: Bedienung eines SSH-Clients zum aufbau einer SSH Verbindung und tunneln des MySQL Ports zur lokalen Maschine

Anforderung2: abholen eines Datensatzes via tunnel aus 1 (wird die SQL Abfrage zur Verfügung gestellt, oder muss Sie nach vorgaben erstellt weden?)

Anforderung3: Bereitstellung der abgeholten Daten in einer Variable. (in einer c++ klasse? in einer umgebungsvariablen des systems? ...?)

zu verwendende sprache: c++ (nativ? c++/CLI ? ggf. egal solange man das ganze von c++ aus bedienen kann?)
 
Hallo,

ja soweit richtig.

Die SQL Abfrage habe ich derzeit über ein PHP Script, das kann ich zusenden. Bei Bedarf, kann ich auch ftp und MySQL Daten zusenden.

Das ganze läuft auf einer Konsolenanwendung.
 
Anforderung1: Bedienung eines SSH-Clients zum aufbau einer SSH Verbindung und tunneln des MySQL Ports zur lokalen Maschine

Richtig


Anforderung2: abholen eines Datensatzes via tunnel aus 1 (wird die SQL Abfrage zur Verfügung gestellt, oder muss Sie nach vorgaben erstellt weden?)

Wie oben geschrieben, habe ich die Abfrage bereits in einem PHP file. Die kann zur Verügung gestellt werden.


Anforderung3: Bereitstellung der abgeholten Daten in einer Variable. (in einer c++ klasse? in einer umgebungsvariablen des systems? ...?)

zu verwendende sprache: c++ (nativ? c++/CLI ? ggf. egal solange man das ganze von c++ aus bedienen kann?)

Die abgeholten Daten in einer Umgebungsvariable. Das restliche Projekt läuft auf C++ Win32 Konsolenanwendung.


http://www.vb-paradise.de/sonstiges/showroom-testcenter/libraries-controls/66171-mysqllib-3/

Das könntee man als Basis nehmen, das würde mir vom Punkt Sicherheit gut gefallen.
 
Zuletzt bearbeitet:
mhh ... aaaaalso:

du hast dich nicht zu native VS /CLI geäussert, aber dem verweis auf eine .Net lib entnehme ich mal dass du /CLI willst ... (also managed code ... c++ mit .Net Framework) ... dann stelle ich aber gleich die frage hinterher warum dann der teil hier in c++ gemacht werden soll ... wenn du dich eh in der .Net welt bewegst, und das hier als lib willst, wäre es egal in welcher .Net sprache das geschrieben ist, da du aus deinem programm einfach das assembly einbinden kannst ... egal ob das nun vb.net c# c++/CLI oder sonst eine .Net sprache ist ...

zu besagter von dir verlinkter lib:
diese lib wird scheinbar so eingesetzt, dass sie geschützt durch einen propräritären sicherheitsmechanismus die schnittstelle zu mysql via http verfügbar macht. ob wirklich alle funktionen darüber zugänglich sind, kann man so heraus erstmal nicht sagen ...

auf jeden fall würde ich diesem weg weitaus weniger vertrauen schenken als einer SSH geschützten port weiterleitung...


ich hab mir das ganze mal als fingerübung in c++/cli angetan ...

was das mit der bezahlung angeht ist das so eine sache ... ich würde folgendes vorschlagen: du postest hier eine kopie einer spendenquittung aktuellen datums an ärzte ohne grenzen und ich stell den quelltext hier rein ...
 
Hallo,

erstmal Danke für deine Antwort.

Ich kenne mich nicht besonderer gut in C++ aus. Deswegen habe ich wahrscheinlich das falsch gedeutet.
Ich habe einen weiteren Baustein der dann eben mit den abgeholten Daten Arbeiten soll. Schick für den link mit den Projekt per PM
 
also ich hab nu hier liegen ein C++/CLI projekt (VS2010) ...

aleinstehende konsolenanwendung, über eine xml datei konfigurierbar ...

sie nimmt einen pfad für putty entgegen, und einen string an parametern ... das wird zu beginn instanziert und etabliert dann einen tunnel (SSH lokaler port tunnel)

desweiteren nimmt die anwendung entgegen: einen system DSN (odbc verbindung für MySQL)

sowie eine query ...

zu guter letzt noch 3 parameter für die ausgabe...

welche umgebungsvariable befüllt werden soll ...

was als trennzeichen zwischen zeilen stehen soll ... und was als trennzeichen zwischen spalten stehen soll ...

das prog startet putty ... führt via odbc das statement aus und liefert das ergebnis mit trennzeichen in der umgebungsvariable ab ...danach wird putty wieder geschlossen...

die umgebungsvariable wird systemglobal gesetzt (sprich registry)


alles in allem, mit ein paar kommentaren ... grobe 100 zeilen ... mit meinen üblichen leerzeilen 150 ... :p
 
  • Like
Reactions: CDW
Hallo,

nochmal Danke für deine Mühe.

Hier die Überweisung.



Ich warte nun gespannt auf das Ergebnis. Plink und Putty hatte ich auch schon im Visier. Aber wie gesagt, meine Programmierkentnisse reichten dazu nicht aus.
 
Zuletzt bearbeitet:
Wenn das immer so "easy" gehen würde wie hier, hätten vermutlich viele Hilfseinrichtungen keine Probleme mit Geld und könnten den Menschen in der Welt noch besser helfen.

Hut ab!

:thumb_up:
 
Hallo GrafZahl,

kannst du mir das Script zuschicken das ich mir das genauer ansehen kann? Dann kann ich das in mein bestehendes Projekt mit einbauen.

Grüße
 
viel zu tun gehabt heute / respektive gestern ...

VS2010 projekt ordner liegt im anhang

zur benutzung:

es gibt eine settings.xml die alle parameter enthält

Code:
<?xml version="1.0" encoding="utf-8"?>
<settings>
  <tunnelCmd>
    <file>X:\ssh und co\putty.exe</file>
    <args>-ssh root@srv2 -i "X:\ssh und co\squirrel-srv2.ppk" -L 1234:127.0.0.1:3306</args> 
    <!-- USERNAME, HOST und KEYFILE bitte gegen echte werte ersetzen-->
    <!-- -L sthet für einen lokalen Tunnel ... der port 3306 auf dem server (genauer: dem loopback interface des servers) 
    ist danach auf dem client als port 1234 zu erreichen-->
  </tunnelCmd>
  <db>
    <odbcDSN>MySqlODBCsource</odbcDSN>
    <stmt>SHOW TABLES</stmt>
  </db>
  <output>
    <variableName>MySQLdata</variableName>
    <columnSepparatorString>#C#</columnSepparatorString>
    <rowSepparatorString>#R#</rowSepparatorString>
  </output>
</settings>

drin steht da aktuell eine verbindung zu einem meiner systeme, und es wird die liste der tabellen in der db zurückgegeben

aber der reihe nach:

die putty.exe wird unter "X:\ssh und co\putty.exe" gesucht

der args teil enthält die befehlszeilen parameter die putty veranlassen eine verbindung mit tunnel aufzubauen ... in diesem beispiel als benutzer root zum host srv2 ... identifizierung erfolgt über einen rsa schlüssel in der angegebenen ppk datei ... wichtig sind die anführungszeichen um die datei, da der pfad in meinem fall leerzeichen enthält ... im prinzip nimmt putty die gleichen parameter wie plink an ...

der tunnel wird zurch den -L parameter spezifiziert ... ich benutze den lokalen port 1234 und hole mir dort hin den port den der ssh server unter 127.0.0.1:3306 erreichen kann (127.0.0.1 bezieht sich also auf die sicht von srv2 in meinem beispiel) ... 3306 ist der default MySQL port

darüber hinaus habe ich den mysql odbc connector installiert und eine entsprechende odbc verbindung als system-DSN eingerichtet ... der name dieser DSN ist "MySqlODBCsource" die konfiguration erfolgt über die odbc datenquellen verwaltung der systemsteuerung ... systemsteuerung/verwaltung/odbc

dort hinterlege ich eine verbindung auf einen server unter localhost:1234 mit meinem normalen datenbank benutzer

da das ganze auf odbc setzt, ist es recht egal ob da nun eine MySQL db hinter hängt ... oder eine oracle ... oder MSSQL ... etc

richtigen odbc connector installieren und glücklich sein

wieder zurück zur settings.xml

stmt ist glaube ich klar ... da kommt deine abfrage rein ...

output:

der variablen name der globalen systemvariablen der verwendet werden soll um das resultat zu speichern

danach noch trennzeichen/trennstrings für spalten und zeilen umbruch, falls deine abfrage mehr als eine spalte und/oder zeile liefert ...

es gelten die üblichen einschränkungen für umgebungsvariablen ... so oberhalb von 2000 zeichen oder so ist ende ... je nach dem was dein OS da so verpackt ...
 
Zuletzt bearbeitet:
viel zu tun gehabt heute / respektive gestern ...

Das war keineswegs negativ gemeint!


Kannst du dir das nochmal ansehen? Habe das projekt geöffnet und Debugging gestartet. Ohne irgendwas sonst zu ändern.
Bekomme dann diese Meldung.
Microsoft Visual 2010 hat gesagt.:
1>------ Erstellen gestartet: Projekt: sshMySQL, Konfiguration: Debug x64 ------
1>Der Buildvorgang wurde am 28.02.2013 16:03:45 gestartet.
1>InitializeBuildStatus:
1> "x64\Debug\sshMySQL.unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
1>GenerateTargetFrameworkMonikerAttribute:
1>Das Ziel "GenerateTargetFrameworkMonikerAttribute" wird übersprungen, da alle Ausgabedateien hinsichtlich der Eingabedateien aktuell sind.
1>ClCompile:
1> stdafx.cpp
1> AssemblyInfo.cpp
1> sshMySQL.cpp
1>sshMySQL.cpp(133): warning C4101: 'ex': Unreferenzierte lokale Variable
1> Generating Code...
1> .NETFramework,Version=v4.0.AssemblyAttributes.cpp
1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
1>
1>Fehler beim Erstellen
1>
1>Verstrichene Zeit 00:00:01.70
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
 
Zuletzt bearbeitet:
Hallo,

ich habe jetzt Visual studio gelöscht und neu installiert.

Das ist komplexer und komplizierter wie ich es dachte. Ich verstehe das nicht ganz. Wie trage ich de meine Zugangsdaten für MySQL ein und den Befehl?

Wollte das irgendwie einbauen, aber werde von Fehlermeldungen überschmissen.

Code:
#include <my_global.h>
#include <mysql.h>
 
int main(int argc, char **argv)
{
 
  MYSQL *conn;
  MYSQL_RES *result;
  MYSQL_ROW row;
  int num_fields;
  int i;
 
  conn = mysql_init(NULL);
  mysql_real_connect(conn, "localhost", "zetcode", "passwd", "testdb", 0, NULL, 0);
 
  mysql_query(conn, "SELECT * FROM writers");
  result = mysql_store_result(conn);
 
  num_fields = mysql_num_fields(result);
 
  while ((row = mysql_fetch_row(result)))
  {
      for(i = 0; i < num_fields; i++)
      {
          printf("%s ", row[i] ? row[i] : "NULL");
      }
      printf("\n");
  }
 
  mysql_free_result(result);
  mysql_close(conn);
 
}
 
Zuletzt bearbeitet:
ah ... rekapitulieren wir mal:

du wolltest ein prog dass eine abfrage tätigt, und das ergebnis in eine umgebungsvariable schmeißt ... so wie ich das hier aber jetzt sehe ist da jetzt pustekuchen mit umgebungsvariable, und du willst eigentlich aus einer laufenden anwendung abfragen stellen ... (via umgebungsvariable setzt vorraus, dass deine abfrage gelaufen sein muss bevor das andere programm welches die daten verarbeitet überhaupt startet)

sprich die projektausrichtung und die spezifizierten anforderungen machen gerade eine kehrtwende um 180° ...

normalerweise wären wir jetzt an dem punkt wo du bekommen hast was du bestellt hast, was aber nicht das ist was du haben willst ... :rolleyes:





was du vermutlich haben willst ist eine integration eines putty tunnels in deine bestehende anwendung ...

sprich nix mit umgebungsvariable, und auch nix mit ausführen einer abfrage ...

der putty tunnel soll aufgebaut werden wenn deine anwendung ihn braucht, und danach willst du solange du abfragen stellen willst den tunnel benutzen ...

abgesehen davon ist der code den du gepostet hast natives c++ (also nix mit .net)




ich habs nicht getestet, aber ich vermute mal dein code da funktioniert soweit ...

wenn ich mal deine aussagen und diesen code versuche in einklang zu bringen, bietet sich mir folgendes bild:

du willst bevor du deine mysql verbindung aufbaust, den tunnel aufbauen, und nachdem du die verbindung nicht mehr brauchst, den tunnel abbauen ...

das erreichst du in dem du vor deinen connect befehl einen CreateProcess() winapi-call einbaust, der putty mit der entsprechenden befehlszeile startet ...

sieht ungefähr so aus wobei tun_file den pfad zur putty.exe enthalten sollte und tun_args die befehlszeilen argumente (siehe settings.xml):
Code:
            STARTUPINFO si;
            PROCESS_INFORMATION pi;

            CreateProcess(
                tun_file,
                tun_args, 
                NULL, 
                NULL, 
                false, 
                DETACHED_PROCESS, 
                NULL, 
                NULL,
                &si,
                &pi
            )
nachdem dein prog den tunnel nicht mehr braucht, kann es TerminateProcess(pi.hProcess,0) aufrufen um putty wieder zu killen ...

edit: solltest du probleme damit bekommen, dass der tunnel noch nicht verfügbar ist, wenn dein mysql connect durchläuft...

Code:
WaitForInputIdle(pi.hProcess,INFINITE);

vor den mysql connect aufruf
 
Zurück
Oben