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);
+    }
+}
