一部の 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();
}
}
}