From f04838195b84c702121f658b9328b69e450ae5c3 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 6 Oct 2024 20:31:10 +0800 Subject: [PATCH] feat: get ip from session --- .../java/com/zfoo/net/util/SessionUtils.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/util/SessionUtils.java b/net/src/main/java/com/zfoo/net/util/SessionUtils.java index 9e3761c0..385b38e5 100644 --- a/net/src/main/java/com/zfoo/net/util/SessionUtils.java +++ b/net/src/main/java/com/zfoo/net/util/SessionUtils.java @@ -44,6 +44,28 @@ public abstract class SessionUtils { return sessionAttr.get(); } + public static String toIp(Session session) { + try { + var remoteAddress = session.getChannel().remoteAddress().toString(); + var ip = StringUtils.substringAfterFirst(remoteAddress, StringUtils.SLASH); + ip = StringUtils.substringBeforeFirst(ip, StringUtils.COLON); + return StringUtils.trim(ip); + } catch (Throwable t) { + // do nothing + // to avoid: io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer + // 有些情况当建立连接过后迅速关闭,这个时候取remoteAddress会有异常 + } + return StringUtils.EMPTY; + } + + public static long toIpLong(Session session) { + var ip = toIp(session); + if (StringUtils.isBlank(ip)) { + return session.getSid(); + } + return NetUtils.ipToLong(ip); + } + public static String sessionInfo(ChannelHandlerContext ctx) { var session = SessionUtils.getSession(ctx); if (session == null) { @@ -56,15 +78,7 @@ public abstract class SessionUtils { if (session == null) { return CHANNEL_INFO_TEMPLATE; } - var remoteAddress = StringUtils.EMPTY; - try { - remoteAddress = StringUtils.substringAfterFirst(session.getChannel().remoteAddress().toString(), StringUtils.SLASH); - } catch (Throwable t) { - // do nothing - // to avoid: io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer - // 有些情况当建立连接过后迅速关闭,这个时候取remoteAddress会有异常 - } - return StringUtils.format(CHANNEL_INFO_TEMPLATE, remoteAddress, session.getSid(), session.getUid()); + return StringUtils.format(CHANNEL_INFO_TEMPLATE, toIp(session), session.getSid(), session.getUid()); } public static String sessionSimpleInfo(ChannelHandlerContext ctx) {