精华内容
下载资源
问答
  • 如何通过域名获取ip,以及与端口关系问题

    之前用java发送http请求的时候一般都是ip+port

    http://192.168.110.123:8800/yxl

    后来遇到请求是域名的情况:

    如:http://www.yxl.com/yxl

    发现不见了端口,采用java去解析:

    try {

    InetAddress address = InetAddress.getByName("www.yxl.com");

            System.out.println(address.getHostAddress());

    } catch (Exception e) {

            e.printStackTrace();

        }

    只能得到ip,得不到端口。(www.yxl.com是自己在hosts配置的,配置方法可查看该博主的其他章节:nginx中修改server_name无效,修改为www.test.com无法访问,通过localhost可以访问

    后来查阅资料发现,通过域名访问时,若不是默认端口(80)时需要在域名后指明,如Tomcat的后面需要加8080http://localhost:8080/yxl

    若不指明,则是访问默认端口:80

    如访问百度www.baidu.comwww.baidu.com:80效果是一样的。

    展开全文
  • 实时获取端口和ip地址(域名)

    千次阅读 2019-03-11 11:29:01
    使用自定义获取端口和ip地址(域名)window.location 在项目当中,很多项目是属于外包,当项目做完就需要部署然后交给甲方,那么此时项目就不是我们负责 端口号,和域名,后期因为部署到服务器上就不是我们管,然后是...

    使用自定义获取端口号和ip地址(域名)window.location

    在项目当中,很多项目是属于外包的,当项目做完就需要部署然后交给甲方,那么此时项目就不是我们负责
    端口号,和域名,后期因为部署到服务器上就不是我们管,然后是别人负责,就是想实现我在这个机子上打开是这个端口号和域名,在另外一个机子上打开又是另外一个端口号和域名直接跟接口拼接起来

    var domain=window.location.host;   //获取当前域名(ip)和端口号
    var url='http://'+domain+'/zz-viewplatform/scenicViewData/allScenicViewData';
    function getPageInfo () {
      $.ajax({
        url: url,
        type: 'get',
        dataType: 'json',
        success: function (data) {
          console.log(data);
          vueData.pageInfo = data;
        }
      })
    }
    getPageInfo();
    

    window.location下的属性说明

    属性 说明
    window.location.href 完整的url
    window.location.protocol 协议
    window.location.hostname 主机名
    window.location.host 主机名+端口号
    window.location.por t端口号
    window.location.pathname 当前URL的路径部分

    var href = window.location.href;//完整的url
    var protocol = window.location.protocol;//协议
    var hostname = window.location.hostname;//主机名
    var host = window.location.host;//主机名+端口号
    var port = window.location.port;//端口号
    var pathname = window.location.pathname;//当前URL的路径部分
    var search = window.location.search;//路径的查询部分
    var hash = window.location.hash;//开始的锚点

    windows location属性说明

    展开全文
  • 例:本地IP形式: http://127.0.0.1:8083/admin 线上域名:https://www.csdn.net/ 获取域名(第一种方法):location.host = 127.0.0.1:...获取域名 (第二种方法):window.location.host = 127.0.0.1:8083 ...

    例:本地IP形式:  http://127.0.0.1:8083/admin          线上域名: https://www.csdn.net/

    获取域名(第一种方法):location.host   =    127.0.0.1:8083    www.csdn.net

    获取域名 (第二种方法):window.location.host   =    127.0.0.1:8083   www.csdn.net

    获取域名(第三种方法):document.domain     =    127.0.0.1   www.csdn.net

    获取域名(第四种方法):location.hostname     =    127.0.0.1    www.csdn.net

    获取端口号:location.port  =  8083   

    需要注意的是获取的域名不包括“http://”。

    下面我写的页面获取域名地址:

    该js会在页面全部加载后执行

    window.οnlοad=function (){
        var port = location.port;
        var hostUrl = "http://";
        hostUrl += location.host + "/admin";
        $(".logo-img-box").attr("href",hostUrl)
    }
    展开全文
  • 写在前面 Nginx最为最受欢迎反向代理负载均衡服务器,被广泛应用于互联网项目中。这不仅仅是因为Nginx本身比较轻...注意:本文中客户端信息指是:客户端真实IP域名、协议、端口。 Nginx反向代理后,Servle

    写在前面

    Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中。这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者或者公司基于Nginx开发出了众多的高性能插件。使用者可以根据自身的需求来为Nginx指定某款插件以增强Nginx在某种特定场景下的功能或者提升Nginx在某种特定场景下的性能。

    Nginx获取客户端信息

    注意:本文中的客户端信息指的是:客户端真实IP、域名、协议、端口。

    Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。

    直接获取信息存在哪些问题?

    例如在某一台IP为192.168.1.100的服务器上,Jetty或者Tomcat端口号为8080,Nginx端口号80,Nginx反向代理8080端口:

    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:8080; # 反向代理应用服务器HTTP地址
        }
    }
    

    在另一台机器上用浏览器打开http://192.168.1.100/test访问某个Servlet应用,获取客户端IP和URL:

    System.out.println("RemoteAddr: " + request.getRemoteAddr());
    System.out.println("URL: " + request.getRequestURL().toString());
    

    打印的结果信息如下:

    RemoteAddr: 127.0.0.1
    URL: http://127.0.0.1:8080/test
    

    可以发现,Servlet程序获取到的客户端IP是Nginx的IP而非浏览器所在机器的IP,获取到的URL是Nginx proxy_pass配置的URL组成的地址,而非浏览器地址栏上的真实地址。如果将Nginx用作https服务器反向代理后端的http服务,那么request.getRequestURL()获取的URL是http前缀的而非https前缀,无法获取到浏览器地址栏的真实协议。如果此时将request.getRequestURL()获取得到的URL用作拼接Redirect地址,就会出现跳转到错误的地址,这也是Nginx反向代理时经常出现的一个问题。

    如何解决这些问题?

    既然直接使用Nginx获取客户端信息存在问题,那我们该如何解决这个问题呢?

    我们整体上需要从两个方面来解决这些问题:

    (1)由于Nginx是代理服务器,所有客户端请求都从Nginx转发到Jetty/Tomcat,如果Nginx不把客户端真实IP、域名、协议、端口告诉Jetty/Tomcat,那么Jetty/Tomcat应用永远不会知道这些信息,所以需要Nginx配置一些HTTP Header来将这些信息告诉被代理的Jetty/Tomcat;

    (2)Jetty/Tomcat这一端,不能再获取直接和它连接的客户端(也就是Nginx)的信息,而是要从Nginx传递过来的HTTP Header中获取客户端信息。

    具体实践

    配置nginx

    首先,我们需要在Nginx的配置文件nginx.conf中添加如下配置。

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    

    各参数的含义如下所示。

    • Host包含客户端真实的域名和端口号;
    • X-Forwarded-Proto表示客户端真实的协议(http还是https);
    • X-Real-IP表示客户端真实的IP;
    • X-Forwarded-For这个Header和X-Real-IP类似,但它在多层代理时会包含真实客户端及中间每个代理服务器的IP。

    此时,再试一下request.getRemoteAddr()request.getRequestURL()的输出结果:

    RemoteAddr: 127.0.0.1
    URL: http://192.168.1.100/test
    

    可以发现URL好像已经没问题了,但是IP还是本地的IP而非真实客户端IP。但是如果是用Nginx作为https服务器反向代理到http服务器,会发现浏览器地址栏是https前缀但是request.getRequestURL()获取到的URL还是http前缀,也就是仅仅配置Nginx还不能彻底解决问题。

    通过Java方法获取客户端信息

    仅仅配置Nginx不能彻底解决问题,那如何才能解决这个问题呢?一种解决方式就是通过Java方法获取客户端信息,例如下面的Java方法。

    /***
     * 获取客户端IP地址;这里通过了Nginx获取;X-Real-IP
     */
    public static String getClientIP(HttpServletRequest request) {
        String fromSource = "X-Real-IP";
        String ip = request.getHeader("X-Real-IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        	ip = request.getHeader("X-Forwarded-For");
        	fromSource = "X-Forwarded-For";
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        	ip = request.getHeader("Proxy-Client-IP");
        	fromSource = "Proxy-Client-IP";
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        	ip = request.getHeader("WL-Proxy-Client-IP");
        	fromSource = "WL-Proxy-Client-IP";
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        	ip = request.getRemoteAddr();
        	fromSource = "request.getRemoteAddr";
        }
        return ip;
    }
    

    这种方式虽然能够获取客户端的IP地址,但是我总感觉这种方式不太友好,因为既然Servlet API提供了request.getRemoteAddr()方法获取客户端IP,那么无论有没有用反向代理对于代码编写者来说应该是透明的。

    接下来,我就分别针对Jetty服务器和Tomcat服务器为大家介绍下如何进行配置才能更加友好的获取客户端信息。

    Jetty服务器

    在Jetty服务器的jetty.xml文件中,找到httpConfig,加入配置:

    <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
        ... 
      <Call name="addCustomizer">
        <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
      </Call>
    </New>
    

    重新启动Jetty,再用浏览器打开http://192.168.1.100/test测试,结果:

    RemoteAddr: 192.168.1.100
    URL: http://192.168.1.100/test
    

    此时可发现通过request.getRemoteAddr()获取到的IP不再是127.0.0.1而是客户端真实IP,request.getRequestURL()获取的URL也是浏览器上的真实URL,如果Nginx作为https代理,request.getRequestURL()的前缀也会是https。

    另外,Jetty将这个功能封装成一个模块:http-forwarded。如果不想改jetty.xml配置文件的话,也可以启用http-forwarded模块来实现。

    例如可以通过命令行启动Jetty:

    java -jar start.jar --module=http-forwarded
    

    更多Jetty如何启用模块的相关资料可以参考:http://www.eclipse.org/jetty/documentation/current/startup.html

    Tomcat

    和Jetty类似,如果使用Tomcat作为应用服务器,可以通过配置Tomcat的server.xml文件,在Host元素内最后加入:

    <Valve className="org.apache.catalina.valves.RemoteIpValve" />
    

    好了,咱们今天就聊到这儿吧!别忘了给个在看和转发,让更多的人看到,一起学习一起进步!!

    写在最后

    如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!

    展开全文
  • 前言 Nginx最为最受欢迎反向代理负载均衡服务器,被广泛应用于互联网项目中。这不仅仅是因为Nginx本身比较轻量,更...注意:本文中客户端信息指是:客户端真实IP域名、协议、端口。 Nginx反向代理后,Se
  • 刚开始只做了httpws,由于做小程序必须要httpswss,无奈将服务器http进行https转换,ws做wss转换。 首先我们得申请https证书,请参考前面博客。 第二全站https化
  • Nginx支持的虚拟主机有三种1、基于域名的虚拟主机2、基于IP的虚拟主机3、基于端口的虚拟主机且每一种虚拟主机均可通过“server{}" 配置段实现各自的功能一、基于域名搭建1、编译安装Nginx服务2、远程获取Windows上的...
  • ip地址和端口

    2020-12-31 09:26:28
    req.socket.remoteAddress //获取当前请求客户端的IP地址 理解IP地址和端口号 ip地址分配给网卡,一个网卡对应一个IP;如果一台计算机有多个网卡,则有多个ip;在同一个局域网内,ip地址不能相同 网络只能使用ip...
  •  封装域名和地址,不包含端口信息  获取对象方法,没有对外开放构造方法,因此通过返回InetAddress对象静态方法进行实例化  InetAddress.getLocalHost();  InetAddress.getByName("www.abc.com");/...
  • 今天做海康微视视频接口的时候要用到硬盘录像机的IP地址、端口号、用户名密码。 但是发现客户IP地址是动态获取的,经常变化。 所以需要根据域名解析出IP。 代码如下 //判断输入的是否是IP Regex rx = ...
  • telnet那个外网IP和端口号可以得到这些,只能确定是NGINX服务 HTTP/1.1 400 Bad Request Server: nginx Date: Thu, 01 Mar 2018 08:04:18 GMT Content-Type: text/html Content-Length: 166 Connection: close...
  • System.Uri类用于处理Uri地址信息,常用到它地方有,相对Uri地址转绝对Uri地址,获取Uri某部分信息等等,可以说是一个非常有用...Authority 获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。DnsSafeHost ...
  • socket客户端获取本端的端口

    千次阅读 2019-05-02 12:15:22
    对于客户端socket,一般创建socket后,直接链接服务器的ip和端口, 一般来说,我们知道服务器的ip/域名和端口号,但是本端我们一般默认,不进行显示的绑定固定端口,系统会默认自动分配空闲的端口。 一般我们不需要...
  • JAVA获取域名或者ip相关信息方法 request.getServerName() 返回被请求服务器域名,如果没有域名则返回IP地址:10.0.4.214 request.getServerPort() 返回被请求服务器端口:8081 request.getRemoteHost(...
  • 前奏:以往所知到的ip需要和域名进行绑定,在dns服务器上相应的域名就可以被解析成ip然后选择去哪个主机访问,比如www.baidu.com,最终访问119.75.218.70这个ip,ip为主机的唯一识别码。问题:如果在服务器上发布两...
  • 概念 进行渗透测试之前, 最重要的一步就是信息...知道目标的域名之后,我们要做的第一件事就是获取域名的注册信息,包括该域名的DNS服务器信息注册人的联系信息等 Whois命令查询 whios的概念:Whois 是一个...
  • System.Uri类用于处理Uri地址信息,常用到它地方有,相对Uri地址转绝对Uri地址,获取Uri某部分信息等等,可以...Authority 获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。DnsSafeHost 获得可安全用于 ...
  • URL,又叫做统一资源定位服务。他跟HTTP与HTML一起,构成了www万维网规则。URL包含以下几部分:协议+域名或IP+端口号+路径+...IP分为内网IP和外网IP,通常由路由器获取和分配。一般而言,路由器把网络分成外网和...
  • System.Uri类用于处理Uri地址信息,常用到它地方有,相对Uri地址转绝对Uri地址,获取Uri某部分信息等等,可以...Authority 获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。DnsSafeHost 获得可安全用于 ...
  • 123.10.23.12部署网页服务器ip为:10.0.4.214JAVA获取域名或者ip相关信息方法request.getServerName()返回被请求服务器域名,如果没有域名则返回IP地址:10.0.4.214request.getServerPort()返回被请求服务器端口:...
  • Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端...
  • Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端...
  • 我们知道,ajax请求跨域无非是,协议,域名端口不一样导致跨域。...也就是说,如果你浏览器地址栏使用域名访问,但实际ajax请求f访问ip(或者反过来),也是跨域,这时就要统一,接口..

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 342
精华内容 136
关键字:

获取域名的ip和端口