0

一部の Web サイトを拒否するために、サーバーがプロキシ (仲介) として機能しています。プログラムを実行するマシンの IP アドレスとポート番号を設定します (例: 127.0.0.1:8080)。TCP ソケットを開き、ブラウザからのリクエストをリッスンします。禁止されている Web サイトにアクセスしようとすると、ブラウザにエラー ページが表示されることがあります。しかし、アクセスしたい Web ページが禁止されていない場合は、ブラウザで表示する必要があります。私は最後の部分を行うことができませんでした。禁止されていない Web サイトにアクセスできません。ポート 80 の別のソケットを使用する必要があると思いますが、よくわかりません。

これは、Web サイトが禁止されているかどうかを確認する方法です。禁止されている場合は、エラー ページを返します。それ以外の場合は、Web ページを表示する必要があります。

import java.io.*;

import java.net.InetAddress;
import java.net.Socket;
import java.util.Date;

public class ClientHandler2 extends Thread {

private Socket clientSocket = null;
private DataOutputStream out = null;
private BufferedReader in = null;
//  private Socket mySocket = null;


public ClientHandler2(Socket clientSocket) {
    this.clientSocket = clientSocket;
}

public void run() {


    try {
        //create input-output streams
    //  in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        out = new DataOutputStream(clientSocket.getOutputStream());

        ReqHdr req = new ReqHdr();
        RepHdr rep = new RepHdr();
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


        if(req.parse(clientSocket.getInputStream())){
            MyReader myreader = new MyReader();
            if(myreader.IsBanned(req.url ) == true ){

                InetAddress addr = InetAddress.getLocalHost();
                String IP = addr.getHostAddress();
                Date date = new Date();
                String datestr = date.toString();
                 try{
                      // Create file 
                      FileWriter fstream = new FileWriter("log.txt",true);
                      BufferedWriter log = new BufferedWriter(fstream);
                      log.append("Thread with id: " + this.getId() + " Banned URL:  " + req.url + " IP: " + IP + " Access Time/Date: " + datestr + "\n");
                      //Close the output stream
                      log.close();
                      }catch (Exception e){//Catch exception if any
                      System.err.println("Error: " + e.getMessage());
                      }

                out.writeUTF((rep.formForbidden()));

            }
            else{
                System.out.println("Thread with id " + this.getId() + " URL: " + req.url);


            }
        }
        else{
            System.out.println("error");
        }

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

}

}

ウェブサイトに入ろうとするたびに新しいスレッドを作成する彼女.

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

public class WebPolice {


public static void main(String args[])
{
    //create server socket
    ServerSocket serverSocket = null;
    try {
        serverSocket = new ServerSocket(8080);
        System.out.print("WebPolice listening clients over port 8080...");
    } catch (IOException e1) {
        e1.printStackTrace();
    }


    //at each iteration of the loop, accept new incoming connection and serve the client
    while (true)
    {
        //create client socket
        Socket clientSocket = null;
        try {

            //accept incoming connection request
            clientSocket = serverSocket.accept();
            System.out.println("New client connected!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        //create new thread object for the new coming client
        //note that ClientHandler extends Thread
        ClientHandler2 clientHandler = new ClientHandler2(clientSocket);

        //new power for next client

        //run the Thread which deals with the new coming client
        clientHandler.start();


    }
}
}
4

1 に答える 1

0
 System.out.println("Thread with id " + this.getId() + " URL: " + req.url);

上記のブロックで、HttpURLConnection を使用して URL への接続を開き、新しい接続の出力ストリームをクライアントの入力ストリームにリダイレクトします。

POST、DELETE、およびその他の http 操作を個別に処理する必要があります。

于 2012-10-14T14:07:06.583 に答える