diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/Tool/BT/IPUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/Tool/BT/IPUtils.java
index 16c27ae..113ce2e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/Tool/BT/IPUtils.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/Tool/BT/IPUtils.java
@@ -6,6 +6,8 @@
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
+import java.util.Enumeration;
+
 /**
  * 获取请求主机IP地址工具
  *
@@ -30,12 +32,12 @@
 
 
         //打印头信息
-//        Enumeration enums = request.getHeaderNames();
-//        while (enums.hasMoreElements()) {
-//            String headerName = (String) enums.nextElement();
-//            String headerValue = request.getHeader(headerName);
-//            log.info(headerName + ":" + headerValue);
-//        }
+        Enumeration enums = request.getHeaderNames();
+        while (enums.hasMoreElements()) {
+            String headerName = (String) enums.nextElement();
+            String headerValue = request.getHeader(headerName);
+            log.info(headerName + ":" + headerValue);
+        }
 
 
         return getIpAddr(request);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/BT/TrackerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/BT/TrackerController.java
index 45813ae..c4c0152 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/BT/TrackerController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/BT/TrackerController.java
@@ -3,6 +3,7 @@
 
 import cn.hutool.core.util.HexUtil;
 import com.ruoyi.web.Server.AnnounceService;
+import com.ruoyi.web.controller.common.exception.TrackerException;
 import com.ruoyi.web.dao.BT.AnnounceRequest;
 import com.ruoyi.web.Tool.BT.BencodeUtil;
 import com.ruoyi.web.Tool.BT.BinaryFieldUtil;
@@ -13,6 +14,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -46,23 +48,57 @@
 
         String queryStrings = request.getQueryString();
         log.info("收到announce汇报：" + queryStrings);
-        String ipAddr = IPUtils.getIpAddr();
-        byte[] peerId = BinaryFieldUtil.matchPeerId(queryStrings);
 
-        String peerIdHex = HexUtil.encodeHexStr(peerId);
+        // 获取客户端真实IP
+        String ipAddr = request.getRemoteAddr();
+        String xffHeader = request.getHeader("X-Forwarded-For");
+        if (xffHeader != null) {
+            ipAddr = xffHeader.split(",")[0];
+        }
+        log.debug("客户端IP: {}", ipAddr);
 
-        announceRequest.setSeeder(announceRequest.getLeft().equals(0L));
-        announceRequest.setInfoHash(BinaryFieldUtil.matchInfoHash(queryStrings));
-        announceRequest.setPeerId(peerId);
-        announceRequest.setPeerIdHex(peerIdHex);
-        announceRequest.setRemoteAddr(ipAddr);
-        announceRequest.setWantDigest(wantDigest);
-        announceRequest.setUserAgent(ua);
+        // 解析并验证peer_id
+        try {
+            byte[] peerId = BinaryFieldUtil.matchPeerId(queryStrings);
+            if (peerId.length != 20) {
+                throw new TrackerException("Invalid peer_id length: " + peerId.length);
+            }
+            String peerIdHex = HexUtil.encodeHexStr(peerId);
 
-        Map<String, Object> response = announceService.announce(announceRequest);
+            announceRequest.setSeeder(announceRequest.getLeft().equals(0L));
+            announceRequest.setInfoHash(BinaryFieldUtil.matchInfoHash(queryStrings));
+            announceRequest.setPeerId(peerId);
+            announceRequest.setPeerIdHex(peerIdHex);
+            announceRequest.setRemoteAddr(ipAddr);
+            announceRequest.setWantDigest(wantDigest);
+            announceRequest.setUserAgent(ua);
 
-        String responseStr = BencodeUtil.encode(response);
-        return responseStr;
+            // 验证passkey
+            String passkey = extractPasskey(queryStrings);
+            announceRequest.setPasskey(passkey);
+
+            // 处理请求
+            Map<String, Object> response = announceService.announce(announceRequest);
+            return BencodeUtil.encode(response);
+
+        } catch (Exception e) {
+            log.error("处理announce请求失败", e);
+            Map<String, Object> errorResponse = new HashMap<>();
+            errorResponse.put("failure reason", e.getMessage());
+            return BencodeUtil.encode(errorResponse);
+        }
+    }
+
+    // 从queryString中提取passkey的辅助方法
+    private String extractPasskey(String queryString) {
+        if (queryString == null) return null;
+        String[] params = queryString.split("&");
+        for (String param : params) {
+            if (param.startsWith("passkey=")) {
+                return param.substring("passkey=".length());
+            }
+        }
+        return null;
     }
 
     /**
