1
들어오는 소스에서 디버깅 할 패킷을보기 위해 프록시로 Java 프로그램을 만들려고합니다. 이렇게하기 위해 간단한 Java 서버 응용 프로그램을 만들고 장치에서 호스트 파일을 편집했습니다. 모든 것이 이제는 잘 작동하지만 (심지어 내 릴레이 클래스 파일) 완전한 프록시로 만들기 위해 노력하고 있습니다. 요소를 통합하여 서버에 데이터를 보내고 응답을 클라이언트에 다시 보낼 수 있습니까? Man-In-The-Middle 유형의 것 같습니다.자바 프록시 MITM 만들기
import java.net.*;
import java.io.*;
import org.ini4j.Ini;
public class RelayMultiClient extends Thread {
private Socket socket = null;
Socket relay = null;
public RelayMultiClient(Socket socket) {
super("RelayMultiClient");
this.socket = socket;
}
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
if(Relay.max_clients == Relay.connected_clients) {
//There are too many clients on the server.
System.out.println("Connection refused from " + socket.getRemoteSocketAddress() + ": Too many clients connected!");
out.close();
in.close();
socket.close();
}
else {
Ini ini = new Ini(new File("settings.ini"));
Relay.connected_clients++;
System.out.println("Connection from client " + socket.getRemoteSocketAddress() + " established. Clients Connected: " + Relay.connected_clients);
while (in.readLine() != null) {
//Send data to the server
//Receive data from server and send back to client
}
System.out.println("Connection from client " + socket.getRemoteSocketAddress() + " lost.");
Relay.connected_clients--;
out.close();
in.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
감사합니다, 크리스
P.S : 나는 내가 만든 게임에서 데이터를 얻기 위해 노력하고, HTTP 데이터를 얻기 위해 시도하고 있지 않다. 이러한 유형의 데이터에 추가 처리가 필요한지 여부는 알 수 없습니다.
도움 주셔서 감사합니다. 그러나 작동하지 않는 것 같습니다. 다른 Java 서버를 신속하게 설정하고 java 프록시와 연결하려고 시도했지만 연결은 이루어졌지만 아무 것도 해당 서버로 보내지 않습니다. serverWriter 변수가 올바르지 않다고 가정합니다. 나는 네가 가진 것과 똑같이 가지고있다. 라이터 serverWriter = new OutputStreamWriter (relay.getOutputStream()); BufferedReader serverIn = 새 BufferedReader (새 InputStreamReader (relay.getInputStream())); – baseman101
네 말이 맞아, 내 편이라. 수정 된 버전이 효과가 있습니까? – Jk1
수정 된 버전으로 내 코드를 업데이트했습니다. 다른 java 서버 (프록시가 아님)는 serverWriter.write()를 통해 아무 것도 전송되지 않고 연결이되었다고 말합니다. 감사 :)! – baseman101