From da2662ab27e5655636bfa6338d8d1f083a99f36f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 13 六月 2024 18:10:01 +0800
Subject: [PATCH] 国标28181-支持自动识别网卡监听,可以不再配置SIP.IP

---
 src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java |   48 +++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index 56663f1..1373530 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -16,6 +16,9 @@
 import org.springframework.util.ObjectUtils;
 
 import javax.sip.*;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -40,15 +43,46 @@
 	@Override
 	public void run(String... args) {
 		List<String> monitorIps = new ArrayList<>();
-		// 浣跨敤閫楀彿鍒嗗壊澶氫釜ip
-		String separator = ",";
-		if (sipConfig.getIp().indexOf(separator) > 0) {
-			String[] split = sipConfig.getIp().split(separator);
-			monitorIps.addAll(Arrays.asList(split));
+		if (ObjectUtils.isEmpty(sipConfig.getIp())) {
+			try {
+				// 鑾峰緱鏈満鐨勬墍鏈夌綉缁滄帴鍙�
+				Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
+				while (nifs.hasMoreElements()) {
+					NetworkInterface nif = nifs.nextElement();
+					// 鑾峰緱涓庤缃戠粶鎺ュ彛缁戝畾鐨� IP 鍦板潃锛屼竴鑸彧鏈変竴涓�
+					Enumeration<InetAddress> addresses = nif.getInetAddresses();
+					while (addresses.hasMoreElements()) {
+						InetAddress addr = addresses.nextElement();
+						if (addr instanceof Inet4Address) {
+							if (addr.getHostAddress().equals("127.0.0.1")){
+								continue;
+							}
+							if (nif.getName().startsWith("docker")) {
+								continue;
+							}
+							logger.error("[鑷姩閰嶇疆SIP鐩戝惉缃戝崱] 缃戝崱鎺ュ彛鍦板潃锛� {}", addr.getHostAddress());// 鍙叧蹇� IPv4 鍦板潃
+							monitorIps.add(addr.getHostAddress());
+						}
+					}
+				}
+			}catch (Exception e) {
+				logger.error("[璇诲彇缃戝崱淇℃伅澶辫触]", e);
+			}
+			if (monitorIps.isEmpty()) {
+				logger.error("[鑷姩閰嶇疆SIP鐩戝惉缃戝崱淇℃伅澶辫触]锛� 璇锋墜鍔ㄩ厤缃甋IP.IP鍚庨噸鏂板惎鍔�");
+				System.exit(1);
+			}
 		}else {
-			monitorIps.add(sipConfig.getIp());
+			// 浣跨敤閫楀彿鍒嗗壊澶氫釜ip
+			String separator = ",";
+			if (sipConfig.getIp().indexOf(separator) > 0) {
+				String[] split = sipConfig.getIp().split(separator);
+				monitorIps.addAll(Arrays.asList(split));
+			}else {
+				monitorIps.add(sipConfig.getIp());
+			}
 		}
-
+		sipConfig.setShowIp(String.join(",", monitorIps));
 		SipFactory.getInstance().setPathName("gov.nist");
 		if (monitorIps.size() > 0) {
 			for (String monitorIp : monitorIps) {

--
Gitblit v1.8.0