Morjensta
Tein ohjelman, joka ottaa kirjauduttaessa yhteyden VPN-palvelimeen, ja suorittaa bat-tiedoston, jossa on tarvittavat koodit route-taulukon muuttamiseen. Jostain syystä tätä bat-tiedostoa ei suoriteta, vaikka niin olen sen käskenyt tekemään.
package vpn; import java.net.*; import java.util.*; public class Main { public static void main(String[] args) { try { NetworkInterface ni = NetworkInterface.getByName("ppp0"); if(ni != null) { if (ni.isUp()) { System.out.println("Virhe! VPN-yhteys on jo käytössä sovittimessa ppp0. Poistutaan..."); System.exit(0); } } } catch (SocketException ex) { System.out.println(ex + "\nPoistutaan"); System.exit(0); } String VPNIP = VPNIP(); Runtime rt = Runtime.getRuntime(); if(VPNIP != null) { System.out.println(VPNIP); try { System.out.println("1: C:\\WINDOWS\\vpn.bat " + VPNIP); Process pr = rt.exec("C:\\WINDOWS\\vpn.bat " + VPNIP); } catch(Exception e) { System.out.println(e); } } else { System.out.println("null"); try { Process pr = rt.exec("rasdial Koti tunnus salasana"); pr.waitFor(); VPNIP = VPNIP(); if(VPNIP != null) { try { System.out.println("2: C:\\WINDOWS\\vpn.bat " + VPNIP); Process pr2 = rt.exec("C:\\WINDOWS\\vpn.bat " + VPNIP); } catch(Exception e_) { System.out.println(e_); } } } catch (Exception ex) { System.out.println(ex); } } try { if ((NetworkInterface.getByName("ppp0")).isUp()) { System.out.println("Yhteys on käytössä. Poistutaan..."); System.exit(0); } } catch (SocketException ex) { System.out.println("Virhe: " + ex + "\nPoistutaan..."); System.exit(0); } } public static String VPNIP() { String ip = null; NetworkInterface e = null; try { e = NetworkInterface.getByName("ppp0"); System.out.println("getByName: " + NetworkInterface.getByName("ppp0")); if(e != null) { if(e.isUp()) { Enumeration<InetAddress> inetAddresses = e.getInetAddresses(); while(inetAddresses.hasMoreElements()) { ip = ((InetAddress) inetAddresses.nextElement()).toString(); } } else { System.out.println("e.isUp(): " + e.isUp()); } } } catch (Exception ex) { System.out.println(ex); } return (ip != null) ? ip.replace("/", "") : null; } }
Lisäksi tässä on vielä tuo vpn.bat
route delete 0.0.0.0 route add 0.0.0.0 mask 0.0.0.0 91.152.128.1 metric 1 route add 192.168.0.106 mask 255.255.255.255 %1 metric 1 route print
vpn.batin suoritus komentoriviltä käsin toimii, ja oikeinkin vielä, mutta tuolla ohjelmalla ei. Se ei edes tuota mitään virheilmoitusta. Mitäs tuossa on vikana?
Tässä vielä viimeisimmän ajokerran tulos.
lainaus:
getByName: null
null
getByName: name:ppp0 (WAN (PPP/SLIP) Interface) index: 1835012 addresses:
/192.168.0.125;2: C:\WINDOWS\vpn.bat 192.168.0.125
Yhteys on käytössä. Poistutaan...
kokeile pistää rt.execin jälkeen waitfor prosessiisi ( pr2.waitFor(); ), jos ohjelma ehtii sammumaan ennenkuin prosessi on suoritettu loppuun?
Kokeilinkin sitä heti postaukseni jälkeen, ja ohjelma ehti pyöriä 75 minuuttia ennen kuin sammutin sen. Ongelma oli bat-tiedoston kutsusa: Eteen piti lisätä vielä cmd /c start. Nyt se lähti toimimaan, ja toimii hyvin tuossa tarkoituksessa. Nyt se ottaa joka käynnistyskerralla yhteyden palvelimeen, eikä tarvitse käsin säätää. Muutin vähän vielä koodia, koska tuossa on alkuosa ihan turhaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.