# PPTP Protokoll für JAVA



## prototype0815 (18. Jul 2014)

Hello Leuts,
ich würde gerne dieses Thema nochmal aufgreifen, das gab es schonmal vor einigen Jahren, aber vielleicht hat sich ja etwas in der Hinsicht getan, und es gibt Lösungen oder fertige Libraries oder Klassen dafür.

Mein Fall sieht so aus, geschäftlich verbinde ich mich per OpenVPN auf eine Maschine, nur ist das Problem das mir ein ovpn Tunnel nicht die Möglichkeiten bietet wie ein "WinVPN" mittels "pptp", deshalb muss ich ein Java Programm schreiben das auf eine bekannte OpenVPN-IP automatisch eine "pptp"-LAN Verbindung erstellt. 
Das beste daran ist, dass es dynamisch sein soll. Die OpenVPN-IP´s können sich also ändern. Im Prinzip ein Programm das eine pptp Netzwerkverbindung erstellt, auf die IP die ihm mitgegeben wird.

Eine Möglichkeit die mir einfallen würde währe vorhandene DOS Befehle zu nutzen, da ich mich damit aber ebenfalls nicht auskenne, bräuchte ich auch dafür Hilfe.

LG proto:toll:


----------



## Anti-Banane (18. Jul 2014)

schon mal ganz falscher ansatz !

PPTP selbst ist ein tunnel-protokoll ... und laut wiki dazu auch mitlerweile nicht mehr sicher (ob es das überhaupt jemals war ? denn auth und crypt sind optional und daher implementierungsabhängig)

ergo : PPTP sollte schon mal überhaupt nicht mehr verwendet werden


zweitens : OpenVPN nutzt sein eigenes protokoll, hat also nichts direkt mit PPTP, IPsec oder wie sie nicht alles heißen zu tun (auch wenn ich wette das unter der haube irgendwas in die richtung genutzt wird)


zu dem punkt das die vpn-client-ip's dynamisch sind : kann man machen, würde ich aber nicht
bei einem vpn kann man schon ruhig auf statische ip's gehen da die teilnehmer ja bekannt und zuordbar sind

auch versteh ich die frage nicht wirklich ...

willst du jetzt über den OpenVPN-tunnel einen weiteren tunnel legen ... oder zusätzlich einen zweiten unabhängigen ?

außerdem : java ist dafür nicht wirklich das mittel der wahl da der tunnel letzten endes nur java selbst zur verfügung steht ...
lösungen wie eben OpenVPN die im system ein tun/tap installieren und damit transparent von allen anwendungen genutzt werden können ist deutlich sinnvoller


----------



## ceving (21. Jul 2014)

PPTP ist komplett indiskutabel. Vergiss die Abkürzung am besten direkt wieder.

Der Todesstoß für PPTP | heise Security

Microsoft warnt vor PPTP und MS-CHAP | heise Security


----------



## prototype0815 (22. Jul 2014)

Es ist so, mein Kollege meint das er mit dem OpenVPN Tunnel eben nicht genau die Features nutzen kann wie er möchte. Mit einem PPTP Tunnel würde das gehen.

Da PPTP wie ihr schon sagtet, nicht allzu sicher ist, öffnen wir zuerst einen OVPN Tunnel der verschlüsselt ist, da sich nun beide PC´s (PC zu Maschinen-PC) im selben Netzwerk befinden ist es sehr einfach einen unverschlüsselten PPTP Tunnel zu machen und zwar genau auf die IP die der Mschinen-PC dank des OVPN hat.

Über diese Verbindung kann nun mein Kollege alles genau so nutzen wie er möchte.

Ich habe vor einiger Zeit ein Programm geschrieben das eine bstimmte Range an IP´s zuerst "anpingt" dann den NetBios Namen des PC´s abfragt und zum Schluss noch prüft ob eine Software aus unserem Haus darauf läuft. Diese Informationen stellt er dann in einer Tabelle zur Verfügung.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mittlerweile habe ich das Problem "umgangen" es scheint nämlich nicht möglich zu sein das man eine neue VPN-Verbindung per Java anlegt. Deshalb gingen wir davon aus das eine VPN-Verbindung vorhanden sein muss, am besten mit einem bstimmten Namen (sps-ovpn). Wir sprechen hier von einer vorkonfiguierten PPTP Verbindung.
Wenn eine solche angelegt wird taucht folgende Datei im Filesystem auf:
C:\Users\SW\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk
Durch eine kleine Modifikation meines selbst geschriebenen Programms (Aufrufparameter + DoppelklickListener auf die JTable) (durch das klicken wird die IP der angeklickten Zeile benutzt) ist es mir möglich gewesen mithilfe eines BufferedReader und BufferedWriter die Datei zu öffnen, abzuschreiben und ggf. gewünschte Werte zu ändern, abzuspeichern, die alte Datei zu löschen, und die neue Datei in die alte umzubenennen.

Darauf folgt dann noch ein Aufruf eines MS-DOS Befehls der die Verbindung initiert.

```
Runtime.getRuntime().exec("rasphone -d \"sps-ovpn\"");
```


----------



## Anti-Banane (22. Jul 2014)

WIE BITTE ? was bitte ist denn über einen OpenVPN tunnel nicht möglich was über PPTP funktionieren soll ?
frag das mal bitte deinen kollegen wofür er genau PPTP braucht und WARUM es angeblich mit OpenVPN nicht funktionieren soll ... dann könnten wir vielleicht mal gucken ob man ne lösung finden kann


bezüglich dieser wahnwitzigen idee ein TUN/TAP via java im system zu registrieren : geht schon, aber nur mit JNI/JNA ... und DAFÜR ist java nicht erdacht wurden


----------



## prototype0815 (23. Jul 2014)

Die Antwort ist folgende: wenn er per OpenVPN zur Maschine connected, befindet er sich bspw. im 10.8.0.0 Netz. Die SPS Steuerung ist allerdings in einem anderen privaten Netz bspw. 192.168.10.0 und sie lässt sich nur konfiguieren wenn man im selben Netz ist. Deshalb will er eine PPTP Verbindung aufmachen.


----------



## Anti-Banane (23. Jul 2014)

ERLICH ? alter ... ich geh mal kurz in die ecke mich wegkuglen

hat der typ denn mal überhaupt keine ahnung wie n computer funktioniert ? ... sorry ... aber ernsthaft ... wenn man schon sowas wie VPN vor hat sollte man doch bitte mal in der lage sein zu googlen

er kann doch über die server.conf selbst festlegen in welche ip-adressen und -netze verwendet werden

oder er sollte sich vielleicht mit der SPS mal etwas genauer befassen um dort die einstellung zu finden die halt für die beschränkung auf ein spezielles netzt zuständig ist


aber durch einen tunnel noch einen zweiten legen nur damit am ende das ip-netz wieder stimmt ist 1) der falsche ansatz und zeugt 2) leider davon das man überhaupt keine ahnung von dem hat was man da eigentlich macht


----------



## prototype0815 (24. Jul 2014)

Ok, dann lassen wir das mal so im Raum stehen. Gut das ich in diesem kleinen Projekt nur der Entwickler des Java Tools bin, deswegen bin ich nicht in der Verantwortung ob das alles so gut ist wie er es vor hat. Mit SPS kenne ich mich leider gar nicht aus deswegen kann ich zu dem ganzen Thema keine persönliche Stellung nehmen. Aber Danke für eure Hilfe. :toll:


----------



## Anti-Banane (24. Jul 2014)

ja ... bleib locker ... war ja auch nicht auf dich sondern auf den zuständigen kollegen bezogen

ist aber schon ziemlich traurig das man sich software-entwickler oder wie auch immer nennen will und dann nicht mal in der lage ist n rechner zum googlen zu nutzen und sich stattdessen solche aberwitzigen konstrukte einfallen lässt


----------



## ceving (25. Jul 2014)

Irgendwie hört sich das schon ziemlich gruselig an, was ihr da macht.

Angenommen man kann mit TCP auf eure SPS zugreifen und euch ist TCP, weil im Klartext, nicht sicher genug dann reicht es eigentlich völlig aus, wenn man einen SSL/TLS-Tunnel aufbaut. Dafür gibt es fertige Programme out of the box. Zum Beispiel Stunnel.

Ein VPN braucht man nur, wenn man auch was anderes als TCP transferieren will.

Und das was Stunnel macht, kann man auch sehr einfach in Java direkt selber programmieren. Hier ist ein Beispiel für einen einfachen SSL-Echo-Server:

JAVA + SSL Tutorial

Anstelle die Daten zu echoen müsst ihr lediglich eine TCP-Verbindung zur SPS aufbauen und die Datein in beide Richtungen 1-zu-1 durchreichen.

Sowas zu programmieren ist eine Sache von wenigen Stunden. Und danach hat man eine saubere Betriebssystem-unabhängige Lösung ganz ohne PPTP, RAS, VPN, Runtime-exec oder sonstige Verrenkungen.

Immer vorausgesetzt die SPS redet TCP. Wenn sie Netbios, IPX oder anderes ekliges nicht-routebares Zeug braucht, ist man natürlich aufgeschmissen und dann kommt man nicht um ein VPN, manchmal sogar mit Layer2-Bridge, umhin.


----------



## Anti-Banane (26. Jul 2014)

@ceving
auch wenn das thema scheinbar erledigt zu scheint hast du die eigentlich frage leider nicht verstanden

es geht darum das die SPS sich nur aus einem bestimmten netz ansprechen lässt (eben nur aus 192.168.10.0/24) ... und das OpenVPN netz (standard glaube 10.8.0.0/24) diesem halt nicht entspricht

die lösung die man umsetzen wollte war nun eben durch den OpenVPN-tunnel noch einnen PPTP-tunnel zu ziehen um dann halt dem gewünschten netz zu entsprechen


mal von abgesehen das das totaler müll ist und man das OpenVPN-netz entsprechend anpassen kann durch die konfig und somit als transparenten teil des lokalen netzes machen kann (hab ich mit meinem server selbst ausprobiert) ist java hier an sich schon dafür eigentlich völlig ungeeignet da entsprechend verbindungen über die win-api laufen müssten und eh nur mit tun/tap devies laufen


----------



## ceving (26. Jul 2014)

Anti-Banane hat gesagt.:


> es geht darum das die SPS sich nur aus einem bestimmten netz ansprechen lässt (eben nur aus 192.168.10.0/24) ... und das OpenVPN netz (standard glaube 10.8.0.0/24) diesem halt nicht entspricht



Würde man einen SSL-Wrapper benutzen, wäre man genau in dem Netz, weil es gar kein anders Netz gäbe. Das Netz, das hier zum Problem wird, entsteht durch die IP-Tunnelung. Ein Wrapper macht aber keine IP-Tunnelung, sondern packt nur TCP-Pakete in SSL-Pakete (auch wieder TCP) ein.


----------



## Anti-Banane (27. Jul 2014)

-.-'

schon mal an die möglichkeit gedacht das es so einfach vielleicht auch gar nicht umsetzbar ist und daher schon die notwendigkeit eines tunnels besteht ?

wie dem auch sei ... da ja von TO keine rückmeldung kommt sehe ich zumindest die frage als geklärt ...

bezüglich deiner antwort : mir sind solche möglichkeiten bekannt ... wobei auch ich eher auf ein VPN-tunnel als auf simples SSL/TLS setzen würde ... hat bei mir dann aber z.b. den hintergrund das ich dann auch entsprechend das VPN-system so auslegen würde das nur ich mich überhaupt mit verbinden könnte ... was bei einem simplen SSL-Socket und ner scheinbar primitiven SPS weitaus schwieriger wird


----------



## prototype0815 (28. Jul 2014)

Anti-Banane hat gesagt.:


> wie dem auch sei ... da ja von TO keine rückmeldung kommt sehe ich zumindest die frage als geklärt ...



Also ich lese hier mit freuden mit, bei so was kann man immer einiges lernen :toll:
Da ich erst seit einem Jahr zu den beruflichen Informatikern gehöre ist mein Wissen auf einigen Gebieten noch sehr begrenzt, aber ich freue mich immer über so viel Feedback. :applaus:


----------



## Anti-Banane (29. Jul 2014)

wie gesagt ... es geht hier um gottes willen nicht gegen dich ... sondern erlich gesagt gegen deinen kollegen der sich sowas wahnwitzig einfallen lässt

deine idee da selbst was verschiedenen protokollen tricksen zu wollen war ja gar nicht mal so schlecht

es besteht durch aus die möglichkeit das du halt z.b. einen vorhandenen OpenVPN tunnel nutzt und über diesen mit java daten sendest ... es bringt dir nur nichts wenn dein ziel, also die SPS, diese daten dann nicht verarbeiten kann oder halt nicht will (weil sie z.b. nur daten von einem bestimmten netzt zulässt)

klar könnte man jetzt die pakete spoofen ... aber nicht mit java

das einfachste wäre halt den OpenVPN-tunnel so zu konfigurieren das er den anforderungen der SPS entspricht

die nächste idee wäre, das wenn noch ein binde-glied zwischen sitzt, also z.b. n pc der das ganze umbaut, diesen dazu zu nutzen entsprechende umsetzungen durchzuführen ... mit unix sind das bloß ein paar zeilen

so ... nächster punkt wäre dann schon : SPS hängt selbst direkt am netz und der VPN-tunnel geht direkt auf diese drauf
würde aber auch wieder vorraussetzen das die SPS dann n umfangreichen stack benötigt oder n ganzes system was dann eigentlich in der lage sein sollte über configs das verhalten zu ändern


meine gegenfrage würde diesbezüglich äußern : warum sowas umständliches versuchen wollen wenn es deutlich besser geht


----------

