Netty获取客户端IP
Netty4.X 获取客户端IP
最近使用netty-4.0.23.Final 版本编写服务端代码,有个获取客户端代码的小需求,以前使用servlet开发时很机械的就:
1
2
3
4
5
6
|
String ipAddr= "0.0.0.0" ;
if (reqest.getHeader( "X-Forwarded-For" ) == null ) {
ipAddr = reqest.getRemoteAddr();
} else {
ipAddr = req.getHeader( "X-Forwarded-For" );
}
|
ps:X-Forwarded-For 是使用了代理(如nginx)会附加在HTTP头域上的。
理解好HTTP协议基础知识很重要这里不陈述。
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序,支持多种协议,当然也支持HTTP协议。
启动Netty服务的程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public void start() throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup( 1 );
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.option(ChannelOption.SO_BACKLOG, 1024 );
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel. class )
.handler( new LoggingHandler(LogLevel.INFO))
.childHandler( new ServerHandlerInitializer());
Channel ch = bootstrap.bind( 8080 ).sync().channel();
System.err.println( "Open your web browser and navigate to "
+ ( "http" ) + "://127.0.0.1:8080/" );
ch.closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public class ServerHandlerInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel channel) throws Exception {
ChannelPipeline p = channel.pipeline();
p.addLast( new HttpRequestDecoder());
p.addLast( new HttpResponseEncoder());
p.addLast( new ServerHandler());
}
}
|
看出NioServerSocketChannel类的源码可以知道是对java.nio.channels.ServerSocketChannel重新封装,所以在获取客户端IP时调用remoteAddress()强转成java.net.InetSocketAddress即可获取。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class ServerHandler extends SimpleChannelInboundHandler<HttpObject> {
@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg)
throws Exception {
if (msg instanceof HttpRequest) {
HttpRequest mReq = (HttpRequest) msg;
String clientIP = mReq.headers().get( "X-Forwarded-For" );
if (clientIP == null ) {
InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
.remoteAddress();
clientIP = insocket.getAddress().getHostAddress();
}
}
}
}
|
这样我们就可以获取到客户端的IP了。
Netty获取客户端IP相关推荐
- netty获取玩家chanel_Netty4.X 获取客户端IP
最近使用netty-4.0.23.Final 版本编写服务端代码,有个获取客户端代码的小需求,以前使用servlet开发时很机械的就:String ipAddr="0.0.0.0" ...
- Netty获取真实IP
本文参考:https://www.jianshu.com/p/cc8d592582c9 感谢分享 Netty获取真实IP netty想要获取客户端请求的IP有两种方法: 一.通过ChannelHand ...
- c# 获取客户端IP地址方法
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVaria ...
- JS获取客户端IP地址、MAC和主机名的7个方法汇总
今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...
- 如何在PHP中获取客户端IP地址[重复]
本文翻译自:How to get the client IP address in PHP [duplicate] This question already has an answer here: ...
- ASP.NET Core 中使用负载均衡时获取客户端 IP
在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的 ...
- ASP.NET获取客户端IP及MAC地址
ASP.NET获取客户端IP及MAC地址 2008-12-01 14:50 ASP.NET获取客户端IP及MAC地址很多时候非常必要的,像做投票.留言.评论 等系统的时候防止别人恶意操作,导致数据的虚 ...
- JAVA CXF、XFIRE、AXIS webservice获取客户端IP
2019独角兽企业重金招聘Python工程师标准>>> import javax.annotation.Resource; import javax.servlet.http.Htt ...
- 深入分析几种PHP获取客户端IP的情况
深入分析几种PHP获取客户端IP的情况 http://mount.blog.51cto.com/764124/528084 2011-03-27 16:13:29 标签:代理服务器 客户端 文章 PH ...
最新文章
- Reference resources
- OnInitDialog()函数
- WAT中Security选项卡无法连接到数据库解决办法
- Ubuntu 取消 Apache及MySQL等自启动
- 百度工程师控制公司服务器“挖矿”:4个月赚10万 判刑3年
- 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。
- 在使用flask下载文件时会出现的一个文件下载不到的问题
- Devexpress VCL Build v2014 vol 14.1.4 发布
- iOS应用内付费(IAP)开发步骤列表
- [THUWC2017] 在美妙的数学王国畅游
- jenkins无法连接仓库:Command “/usr/bin/git ls-remote -h -- https://gitee.com/xxx.git HEAD“ returned
- 测试一下你真的理解数据库左连接了吗?
- You can't specify target table 'sdb_goods' for update in FROM clause
- 32bit GM命令
- Android系统安装Linux 系统的ubuntu版本
- OJ一元二次方程的根*易错点
- 【老生谈算法】matlab实现方位角计算源码——方位角计算
- 七夕情人节表白网页制作【雪花爱心】
- plt.legend 图例放在外面 子图会挤在一起 子图压缩 压扁
- android模拟器mac版本下载,MaxMac电脑版怎么下载 安卓模拟器电脑版下载地址