Autor Thema: Durch die Firewall  (Gelesen 9712 mal)

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Durch die Firewall
« am: 26.09.03 - 10:02:00 »
Hi!

Ich will mit einem Javaagenten, auf Internet seiten zugreifen.
Das Problem ist aber das ich nicht weis wie ich an unserer Firewall vorbeikomme, mit welchen routinen kann man den Proxyserver ansteuern?

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #1 am: 26.09.03 - 10:50:28 »
Bei den Klassen aus java.net.*:
Code
System.setProperty( "proxySet", "true" );
System.setProperty( "http.proxyHost", "xxx" );
System.setProperty( "http.proxyPort", "xxx" );


System.setProperty("http.proxyUser", "xxx");
System.setProperty("http.proxyPassword", "xxx"); 

@see http://www.javaworld.com/javatips/jw-javatip42_p.html


Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #2 am: 26.09.03 - 11:07:56 »
Cool Danke!

Werds gleich mal testen!
Java ist nämlich nicht grad meine Stärke.

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #3 am: 26.09.03 - 11:49:09 »
kann jemand mir sagen was diese Fehlermeldungen zu sagen haben? Ich kannte mal ne Website da standen die erklärungen zu Fehlermeldungen, keine Ahnung wo ich die jetzt hab.

java.io.FileNotFoundException: http://www.gmx.de
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:595)
   at java.net.URL.openStream(URL.java:825)
   at JavaAgent.NotesMain(JavaAgent.java:39)
   at lotus.domino.AgentBase.runNotes(Unknown Source)
   at lotus.domino.NotesThread.run(NotesThread.java:208)

Wenn ihr den Source Code dazu benötigt kann ich den auch reinposten.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Durch die Firewall
« Antwort #4 am: 26.09.03 - 12:57:32 »
Hint: Also, wenn Du keine Fehlermeldungen generierst, brauchst Du den Link auch nicht mehr zu finden   *smile*
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #5 am: 26.09.03 - 13:11:04 »

Wenn ihr den Source Code dazu benötigt kann ich den auch reinposten.
ja bitte.


Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #6 am: 26.09.03 - 13:25:35 »
hier der komplette SourceCode:

import lotus.domino.*;
import java.util.Vector;
import java.net.*;
import java.io.*;


public class JavaAgent extends AgentBase {

    public void NotesMain() {

     try {
       Session session = getSession();
       AgentContext agentContext = session.getAgentContext();

       // (Your code goes here)
       Database db = agentContext.getCurrentDatabase();
       Agent agent = agentContext.getCurrentAgent();
       // Get document used for passing data
       Document doc =  db.getDocumentByID(agent.getParameterDocID());

   Vector items = doc.getItems();
   
   Item item = (Item)items.elementAt(0);
     String s = item.getName();
   item.remove();
   String fkt = "";

                System.out.println("Prüfe: "+s);
              try {
            System.setProperty( "proxySet", "true" );
            System.setProperty( "http.proxyHost", "xxx" );
            System.setProperty( "http.proxyPort", "xxx" );

            System.setProperty("http.proxyUser", "xxx");
            System.setProperty("http.proxyPassword", "xxx");
 
                   URL url = new URL(s);
                    InputStream in = url.openStream();
                    in.close();
 
                   System.out.println("URL ist da: "+s);
                    fkt = "Yes";
   
                  }
              catch (MalformedURLException e) //URL nicht da
                 {
                     System.out.println("URL not found: " + s);
                     fkt = "No";
                            }
              catch (UnknownHostException e)
                 {
                     System.out.println("Unknown Host: " + s);
   
                     }
             catch (SocketException e)
                 {
                     System.out.println("SocketConnectiont: " + s);
          ////
                     }
              catch (Exception e)
                  {
                    e.printStackTrace();
                    }
       
    RichTextItem rtitem = doc.createRichTextItem(fkt);

   doc.save();
       } catch(Exception e) {
            e.printStackTrace();
        }
    }
}


Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Durch die Firewall
« Antwort #7 am: 28.09.03 - 12:44:48 »
Hi Scorp,

mein posting vom Freitag ist keine Lösung. :-\

Durch die Firewall mit HttpUrlConnection zu kommen ist leider kein wirklich triviales Problem. Es gibt in google einige Lösungen (suche +HttpUrlConnection +Firewall). Ich habe zur Zeit leider wenig Zeit, werde aber auch nach einer Lösungsimplementierung suchen.

Wenn du selbst nach Lösungen suchst, nehme den code aus dem Artikel im Attachment. In deinem code sind ein paar sonstige Fehler drin. Die FileNotFoundException ist aber ein klarer Hinweis darauf, dass dein HttpGetRequest nicht durch die Firewall kommt. Dies ist ein Textausschnitt eines älteren Sun Tutorials, das ich leider nicht mehr auf der Sun Seite finden kann.  

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #8 am: 29.09.03 - 08:13:00 »
Okay, danke aber erstmal, mal schaun ob ich was rausfinden kann.
 :)

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #9 am: 29.09.03 - 18:21:30 »
ich gebe diesem Weg große Chancen:
Zitat
[question]
I am trying to work with a java.net.HttpURLConnection object on a http:// url. The JVM runs behind a firewall. I do get a response code of 200 (OK), but only 'sometimes'. Most of the times I get a "HTTP/1.1 407 Proxy Authorization Required" message.

Also, if I use a https:// url, I get the same 407 message.

Can anyone explain this inconsistency? Please help.

-Nikhil
[/question]
[answer]
Van Glass: In order to do proxy authentication you must send the Proxy username and password base64 encoded within the Proxy-Authorization header.

JSCAPE - Java Networking Components www.jscape.com
[answer]

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #10 am: 29.09.03 - 18:30:19 »
Der andere Weg wird  hier beschrieben:
http://www.developer.com/java/other/article.php/1551421

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #11 am: 29.09.03 - 19:29:17 »
Benoits Marchals Artikel oben brachte die Lösung... und eine gute theoretische Erklärung.

Zitat
Increasingly, companies require employees to log in to the proxy before accessing the Internet. Login is used to better monitor Internet usage; for example, to monitor what sites are visited.
... und wie oben angemerkt, erwarten die meisten Proxies Username, Password Base64 encoded. Vermutlich funktioniert deshalb die Lösung vom Freitag mit dem username und password property nicht (wird nicht base64 encoded)

Die zweite Lösung funktioniert problemlos.
Bei der ersten Lösung stellt sich zumindest in Domino6 die Notes-Java-Agent-Security in den Weg.
Ich habs nicht ausprobiert, aber hier ist wohl die Lösung, um dieses Problem auszuschalten.
diskussion auf notes.net

wie gesagt: Agent2 läuft hier problemlos. Wäre nett, wenn das andere hinter Firmenfirewalls auch mal ausprobieren könnten:

DEIN_NAME, DEIN_PASSWORT, DEIN_PROXY mit eigenen Werten ersetzen.

lsg 1: scheitert an Policy, die verändert werden kann.
Code
import lotus.domino.*;

import java.io.*;
import java.net.*;
import java.util.*;

public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();

         // (my code walks here)
String url = "http://www.marchal.com/",
       proxy = "DEIN_PROXY",
       port = "8080",
       username = "DEIN_NAME",
       password = "DEIN_PASSWORT";
Authenticator.setDefault(new SimpleAuthenticator(
                        username,password));
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (
    HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();

BufferedReader inReader = new BufferedReader(new InputStreamReader(in));
        String inputLine;

        while ((inputLine = inReader.readLine()) != null) 
            System.out.println(inputLine);
      
         // (my code stops here) 

      } catch(Exception e) {
         e.printStackTrace();
      }
   }
   
   
      
}

class SimpleAuthenticator
   extends Authenticator
{
   private String username,
                  password;
                     
   public SimpleAuthenticator(String username,String password)
   {
      this.username = username;
      this.password = password;
   }
   
   protected PasswordAuthentication getPasswordAuthentication()
   {
      return new PasswordAuthentication(
             username,password.toCharArray());
   }
}


lsg2 funktioniert:
Code
import lotus.domino.*;
import java.io.*;
import java.net.*;
public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();

int port = 8080;
String url = "http://www.marchal.com/",
       proxy = "DEIN_PROXY",
       
       authentication = "DEIN_NAME!!!:DEIN_PASSWORT";
URL server = new URL(url);
Socket socket = new Socket(proxy,port);
Writer writer = new OutputStreamWriter(socket.getOutputStream(),
                                       "US-ASCII");
writer.write("GET " + server.toExternalForm() + " HTTP/1.0\r\n");
writer.write("Host: " + server.getHost() + "\r\n");
writer.write("Proxy-Authorization: Basic "
             + new sun.misc.BASE64Encoder().encode(
               authentication.getBytes())
             + "\r\n\r\n");
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(
                            socket.getInputStream(),"US-ASCII"));
String line = reader.readLine();
if(line != null && line.startsWith("HTTP/"))
{
   int sp = line.indexOf(' ');
   String status = line.substring(sp + 1,sp + 4);
   if(status.equals("200"))
   {
 while ((line = reader.readLine()) != null) {
            System.out.println(line);      }
   }
   else
      throw new FileNotFoundException("Host reports error " +
                                       status);
}
else
   throw new IOException("Bad protocol");
reader.close();
writer.close();
socket.close();

      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}

« Letzte Änderung: 29.09.03 - 19:44:05 von Axel Janssen temp »

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #12 am: 30.09.03 - 07:26:58 »
GEIL!!!!! :D

Vielen Dank an alle die mir in meinen 3 Postings hier im "JAVA für Anfänger" geholfen haben!
Vor allem an "Axel_Janssen" der nicht (öffenltich  ;) ) die Nerven wegen meinen Fragen verloren hat.
Also habe jetzt den 2-ten Code ausprobiert und er arbeitet tadellos.

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #13 am: 21.10.03 - 09:59:51 »
Hi nochmal nen hoffentlich kleines Problem, habe jetzt die Lösung 2 in mein Programm eingebaut, funktioniert auch weitgehend sehr gut.

Doch ein Problem hab ich noch, er (der Agent) erkennt z.B. "http://www.alpa.ch/alpa/" als nicht vorhanden (404), sie existiert aber
auch "http://www.adobe.de/products/acrobat/readstep.html"
kann er nicht aufrufen, gibt es dafür einen speziellen  Grund und wenn ja kann man dieses Problem umgehen?

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Durch die Firewall
« Antwort #14 am: 21.10.03 - 10:19:52 »
<OT>
Mensch, da kriegt ja das Portemonnaie gleich ein Loch, wenn man die Site schon nur anschaut .... :-))
</OT>
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #15 am: 21.10.03 - 10:35:12 »
:-)
Stimmt wohl!
Ich will sie ja auch nur auf vorhandensein testen, nichts kaufen. ;-)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Durch die Firewall
« Antwort #16 am: 21.10.03 - 11:03:50 »
Aha, deshalb willst Du das per Programm machen anstatt sie selber anzuschauen ..... harte Security-Policy, aber effizient ......  ;D
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Axel Janssen temp

  • Gast
Re:Durch die Firewall
« Antwort #17 am: 21.10.03 - 11:30:47 »
kümmere mich am wochenende drum, weil ich wg. wichtigen Präsentationstermin nächsten Mittwoch mein Zeitmanagement straffen muß.  

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Durch die Firewall
« Antwort #18 am: 26.10.03 - 14:14:38 »
Komisch beide Urls funktionieren ohne firewall mit diesem Java-Standalone Programm.

Code
/* UrlTest.java
* Created on 26.10.2003
*/

import java.net.*;
import java.io.*;

/**
* Add one sentence class summary here.
* Add class description here.
*
* @author Axel
* @version 1.0, 26.10.2003
*/
public class UrlTest {

   /**
    * 
    */
   public UrlTest() {
      super();
      // TODO Auto-generated constructor stub
   }

   public static void main(String[] args) {
      
      try {
      
      URL yahoo = new URL("http://www.adobe.de/products/acrobat/readstep.html");
      BufferedReader in =
         new BufferedReader(new InputStreamReader(yahoo.openStream()));

      String inputLine;

      while ((inputLine = in.readLine()) != null)
         System.out.println(inputLine);

      in.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

Werds Montag hinter der Firmenfirewall mit dem Agent ausprobieren.

Ein Grund kann sein, dass der Server Zugriff aus Java nicht zulässt (Etwa um den Zugriff von Robots und Webspidern auszuschliessen).
Im http-Request header steht nämlich Java-Agent. Einen Grund für solche Einstellungen bei den genannten Hosts kann ich mir nicht vorstellen.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Scorp

  • Junior Mitglied
  • **
  • Beiträge: 52
  • Ich liebe dieses Forum!
Re:Durch die Firewall
« Antwort #19 am: 27.10.03 - 07:10:59 »
Hmm, komisch! Aber danke erstmal für die mühen.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz