增加tracker转发
Change-Id: I5aad9b143371870714b49040708170f578f7df89
diff --git a/src/main/java/api/ApiApplication.java b/src/main/java/api/ApiApplication.java
index 6d65a81..1f39e69 100644
--- a/src/main/java/api/ApiApplication.java
+++ b/src/main/java/api/ApiApplication.java
@@ -2,10 +2,18 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import tracker.DataCaptureServer;
+import java.io.IOException;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
+
+ try{
+ DataCaptureServer.start();
+ }catch(IOException e){
+ System.out.println(e);
+ }
SpringApplication.run(ApiApplication.class, args);
}
diff --git a/src/main/java/entity/config.java b/src/main/java/entity/config.java
index ec4ab2e..07fbced 100644
--- a/src/main/java/entity/config.java
+++ b/src/main/java/entity/config.java
@@ -13,4 +13,7 @@
public static final String SqlPassword = "123456";
public static final String SqlUsername = "root";
public static final String TORRENT_STORAGE_DIR = "torrents";
+ public static final String trackerHost="0.0.0.0";
+ public static final int trackerPort=6969;
+ public static final int capturePort=6970;
}
diff --git a/src/main/java/tracker/DataCaptureProxy.java b/src/main/java/tracker/DataCaptureProxy.java
new file mode 100644
index 0000000..4d2737f
--- /dev/null
+++ b/src/main/java/tracker/DataCaptureProxy.java
@@ -0,0 +1,73 @@
+package tracker;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.simpleframework.http.Request;
+import org.simpleframework.http.Response;
+import org.simpleframework.http.core.Container;
+
+/**
+ * 拦截 announce 请求,打印参数后转发给真实 Tracker。
+ */
+public class DataCaptureProxy implements Container {
+
+ private final String trackerHost;
+ private final int trackerPort;
+
+ public DataCaptureProxy(String trackerHost, int trackerPort) {
+ this.trackerHost = trackerHost;
+ this.trackerPort = trackerPort;
+ }
+
+ @Override
+ public void handle(Request req, Response resp) {
+ try {
+ // 提取并打印关键参数
+ String infoHash = req.getParameter("info_hash");
+ String uploaded = req.getParameter("uploaded");
+ String downloaded= req.getParameter("downloaded");
+ String passkey = req.getParameter("passkey");
+ System.out.println(
+ "Captured announce → info_hash=" + infoHash +
+ ", uploaded=" + uploaded +
+ ", downloaded=" + downloaded +
+ ", passkey=" + passkey
+ );
+
+ // 构造转发 URL
+ String path = req.getPath().getPath();
+ String query = req.getQuery().toString();
+ String targetUrl = "http://" + trackerHost + ":" + trackerPort
+ + path + "?" + query;
+
+ HttpURLConnection connection =
+ (HttpURLConnection) new URL(targetUrl).openConnection();
+ connection.setRequestMethod("GET");
+
+ // 转发响应码和类型
+ resp.setCode(connection.getResponseCode());
+ String ct = connection.getContentType();
+ if (ct != null) resp.setValue("Content-Type", ct);
+
+ // 转发响应体
+ try (InputStream in = connection.getInputStream();
+ OutputStream out = resp.getOutputStream()) {
+ byte[] buf = new byte[8192];
+ int len;
+ while ((len = in.read(buf)) != -1) {
+ out.write(buf, 0, len);
+ }
+ }
+
+ } catch (Exception e) {
+ try {
+ resp.setCode(500);
+ resp.close();
+ } catch (Exception ignore) {}
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/tracker/DataCaptureServer.java b/src/main/java/tracker/DataCaptureServer.java
new file mode 100644
index 0000000..57ce8d0
--- /dev/null
+++ b/src/main/java/tracker/DataCaptureServer.java
@@ -0,0 +1,33 @@
+package tracker;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import org.simpleframework.http.core.ContainerServer;
+import org.simpleframework.transport.connect.Connection;
+import org.simpleframework.transport.connect.SocketConnection;
+
+import entity.config;
+
+/**
+ * 启动 DataCaptureProxy:
+ * 客户端将 announce 请求发到本机 capturePort,
+ * 由 DataCaptureProxy 拦截并转发到 trackerHost:trackerPort。
+ */
+public class DataCaptureServer {
+
+ public static void start() throws IOException {
+ String trackerHost = config.trackerHost;
+ int trackerPort = config.trackerPort;
+ int capturePort = config.capturePort;
+
+ DataCaptureProxy proxy = new DataCaptureProxy(trackerHost, trackerPort);
+ ContainerServer server = new ContainerServer(proxy);
+ Connection conn = new SocketConnection(server);
+
+ conn.connect(new InetSocketAddress(capturePort));
+ System.out.println("DataCapture proxy listening on port "
+ + capturePort + ", forwarding to "
+ + trackerHost + ":" + trackerPort);
+ }
+}