发信人: huanghwh(五云人) 
整理人: hackerbay(2002-09-06 16:48:52), 站内信件
 | 
 
 
宽带网又搞用户认证了,而且只提供Web认证,搞得上网很不方便, 因为我从home到office做IPSec的VPN.
 我写了一个简单的认证程序,可在系统起动时自动认证.不知freebsd下有多少人使用宽带网,
 希望有所帮助.
 
 package cn.gd.test;
 
 import java.io.*;
 import java.net.*;
 
 /**
  * GDvnet have to use identify user before accessing Internet.
  *
  */
 
 public class LoginGDvnet {
   HttpURLConnection conn = null;
   String userid = null;
   String password = null;
 
   String jsessionid = null;
   String preSessionid = null;
   String successLoc = null;
   String connectframe = null;
 
   public LoginGDvnet(String userid, String password) {
     this.userid = userid;
     this.password = password;
   }
 
   public void getJSessionID() throws IOException {
     //step 1. get jsessionid
     URL loginUrl = new URL("http://172.16.3.8/webcon/login.jsp");
     conn = (HttpURLConnection)loginUrl.openConnection();
     conn.setRequestProperty("User-Agent","al login gdvnet/0.00" );
     if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
       jsessionid = conn.getHeaderField("Set-Cookie");
       int st = jsessionid.indexOf('=');
       int idx = jsessionid.indexOf(';');
       jsessionid = jsessionid.substring(st+1, idx).toLowerCase();
       System.err.println("Get jsessionid:\t"+jsessionid);
     }
     else {
       System.err.println("Could not pass 1, Exit...");
       System.exit(-1);
     }
     System.err.println("Step 1 pass.");
 
   }
 
   public void postU_P() throws IOException {
     //step 2. post userid and password
     URL processUrl = new URL("http://172.16.3.8/webcon/process.jsp;jsessionid="+jsessionid);
     conn = (HttpURLConnection)processUrl.openConnection();
     conn.setRequestMethod("POST");
     conn.setRequestProperty("User-Agent","al login gdvnet/0.00" );
     conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
     conn.setUseCaches(false);
     conn.setDoOutput(true);
     conn.setDoInput(true);
 
     ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
     String postData = "runscript=0&timeout=120&userid="+URLEncoder.encode(userid)+
                       "&passwd="+URLEncoder.encode(password);//+"\n";
     //System.err.println(postData);
     byteOut.write(postData.getBytes());
     byte[] buf = byteOut.toByteArray();
 
     conn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
     conn.setRequestProperty("Content-length",""+buf.length);
     conn.getOutputStream().write(buf);
     conn.getOutputStream().flush();
     conn.getOutputStream().close();
 /*
     try {
       Thread.sleep(1*1000);
     }
     catch(Exception ex) {}
 */
     if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
       /*
       BufferedReader brr = new BufferedReader( new java.io.InputStreamReader( conn.getInputStream()));
       String line = null;
       while( (line= brr.readLine()) != null) {
         System.out.println(line);
       }
       brr.close();*/
       System.err.println("Send userid and passwd...");
       System.err.println("Step 2 pass.");
     }
     else {
       System.err.println("Could not pass 2, Exit...");
       System.exit(-1);
     }
   }
 
   public void getSuccessURL()  throws IOException {
     //step 3. get successs location URL
     URL checkUrl = new URL("http://172.16.3.8/webcon/checklogin.jsp");
     conn = (HttpURLConnection)checkUrl.openConnection();
     conn.setInstanceFollowRedirects(false);
     conn.setRequestMethod("GET");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     conn.setRequestProperty("User-Agent","Linyx/2.8 libwww-FM/2.14" );
     conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
     conn.setRequestProperty("Referer", "http://172.16.3.8/webcon/process.sjp;jsessionid="+jsessionid);
     if( conn.getResponseCode()==HttpURLConnection.HTTP_MOVED_TEMP) {
       successLoc = conn.getHeaderField("Location");
       System.err.println("Get success location :"+successLoc);
       System.err.println("Step 3 pass.");
     }
     else {
       System.err.println("Could not pass 3, Exit...");
       System.exit(-1);
     }
 
   }
 
   public void getPreSessionID() throws IOException {
     URL successUrl = new URL(successLoc);
     conn = (HttpURLConnection)successUrl.openConnection();
     conn.setDoInput(true);
     conn.setRequestProperty("User-Agent","lynx login gdvnet/0.00" );
     conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
     if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
       //find sessionid
       BufferedReader brr = new BufferedReader( new java.io.InputStreamReader( conn.getInputStream()));
       String line = null;
       while( (line= brr.readLine()) != null) {
         if(line.indexOf("sessionid") != -1) {
           int st = line.lastIndexOf('=');
           //int st = line.indexOf('\"');
           int end = line.indexOf('>');
           preSessionid = line.substring(st+1,end);
           System.err.println("Get preSessionID:\t"+ preSessionid);
           System.err.println("Step 4 pass.");
           break;
         }
       }
       brr.close();
     }
     else {
       System.err.println("Could not pass 4, Exit...");
       System.exit(-1);
     }
   }
 
   public void disconnectUser() throws IOException {
     //step 2. post userid and password
     URL processUrl = new URL("http://172.16.3.8/webcon/disconnectuser.jsp");
     conn = (HttpURLConnection)processUrl.openConnection();
     conn.setRequestMethod("POST");
     conn.setRequestProperty("User-Agent","al login gdvnet/0.00" );
     conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
     conn.setUseCaches(false);
     conn.setDoOutput(true);
     conn.setDoInput(true);
 
     ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
     String postData = "userid="+URLEncoder.encode(userid)+
                       "&sessionid="+URLEncoder.encode(preSessionid);
     //System.err.println(postData);
     byteOut.write(postData.getBytes());
     byte[] buf = byteOut.toByteArray();
 
     conn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
     conn.setRequestProperty("Content-length",""+buf.length);
     conn.getOutputStream().write(buf);
     conn.getOutputStream().flush();
     conn.getOutputStream().close();
     if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
 
       BufferedReader brr = new BufferedReader( new java.io.InputStreamReader( conn.getInputStream()));
       String line = null;
       while( (line= brr.readLine()) != null) {
         System.out.println(line);
       }
       brr.close();
 
       System.err.println("Send disconnect user...");
       System.err.println("Step 5 pass.");
     }
     else {
       System.err.println("Could not pass 5, Exit...");
       System.exit(-1);
     }
 
   }
 
   public void getRefreshURL() throws IOException {
     //step 4. get refresh URL
     URL successUrl = new URL(successLoc);
     conn = (HttpURLConnection)successUrl.openConnection();
     conn.setDoInput(true);
     conn.setRequestProperty("User-Agent","lynx login gdvnet/0.00" );
     conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
     if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
       //find target=_blank
       BufferedReader brr = new BufferedReader( new java.io.InputStreamReader( conn.getInputStream()));
       String line = null;
       while( (line= brr.readLine()) != null) {
         if(line.startsWith("<a target=_blank")) {
           int st = line.indexOf('?');
           //int st = line.indexOf('\"');
           int end = line.lastIndexOf('\"');
           connectframe = "http://172.16.3.8/webcon/refreshtcp2.jsp?"+line.substring(st+1, end);
           //connect3.jsp?
           //connect2.jsp?
           //refreshtcp2.jsp?
           //refresh2.jsp?
           System.err.println("Get Refresh URL:\t"+ connectframe);
           System.err.println("Step 4 pass.");
           break;
         }
       }
       brr.close();
     }
     else {
       System.err.println("Could not pass 4, Exit...");
       System.exit(-1);
     }
   }
 
   public void loopRefresh() throws IOException {
 
     System.err.println("Now, Start refresh URL thread.");
     while(true) {
       try {
         Thread.sleep(60*1000);
       }
       catch(Exception ex) {}
       URL connectframeUrl = new URL(connectframe);
       conn = (HttpURLConnection)connectframeUrl.openConnection();
       conn.setDoInput(true);
       conn.setRequestProperty("User-Agent","lynx login gdvnet/0.00" );
       if( conn.getResponseCode()==HttpURLConnection.HTTP_OK) {
         BufferedReader brr = new BufferedReader( new java.io.InputStreamReader( conn.getInputStream()));
         String line = null;
         boolean isLive = false;
         while( (line= brr.readLine()) != null) {
           if(line.startsWith("Keep Alive")) {
             isLive = true;
             System.out.println(line);
           }
         }
         brr.close();
         if(!isLive) {
           break;
         }
       }
       conn.disconnect();
     }
   }
 
   public void process() {
     while(true) {
       try {
         getJSessionID();
         postU_P();
         getSuccessURL();
         if(successLoc.endsWith("notlogout.jsp")) {
           getPreSessionID();
           disconnectUser();
         }
         else {
           getRefreshURL();
           loopRefresh();
         }
       }
       catch(Exception ex) {
         ex.printStackTrace();
       }
     }
   }
 
   public static void main(String[] args) throws Exception {
     LoginGDvnet loginGDvnet1 = new LoginGDvnet("huhlht","lht1973");
     loginGDvnet1.process();
   }
 } | 
 
 
 |