精华内容
下载资源
问答
  • 如何通过域名获取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地址、端口、服务器类型标题

    这个是我在一家网络安全公司面试时的操作题,回来后经过多次修改后才得到一个比较完整的程序。

    整个模块可以分成两个大部分。一个是数据库的操作,一个是信息的获取(类似爬虫?)

    信息的获取分为四个小操作,ip的获取、端口的获取、服务器类型的获取和标题的获取。


    IP的获取:

      ip的获取代码:

        def getIp(self,url):
            try:
                str_ip = str(socket.gethostbyname(url[7:]))           #通过socket方式以域名获取IP
                self.print_msg(0, str_ip, "")
                self.ip = str_ip
                if str_ip:
                    self.correct += 1
            except socket.error, e:
                print u"ip获取失败"

    ip的获取其实比较简单,就是用socket模块的方法根据域名访问获取ip。要注意的是,这个域名是不包括”http://“,所以代码中用url[7:]


    端口的获取其实更简单:

        def getPort(self):                                 #通过socket返回端口号
            try:
                str_port = str(socket.getservbyname('http', 'tcp'))
                self.print_msg(1, str_port, "")
                self.port = str_port
                if str_port:
                    self.correct += 1
            except socket.error,e:
                print u"端口号获取失败"

    用的也是socket模块的方法。


    服务器类型的获取:

    一开始我的想法是通过正则去匹配应答头,但是过了两天发现其实有更简单的方法,直接用urllib2模块的方法去访问,回传的数据中的header中直接找到"Server"这个键对应的键值就是服务器类型了。

     def getServerType(self):                         #在header字典里寻找Server对应的键值
            self.server = str(self.header.get("Server"))
            self.print_msg(2,self.server, "")
            if self.server:
                self.correct +=1

    最后就是标题的获取,这个其实算是最难的一个信息。标题没有像服务器类型一样存在header里面,而是在HTML文本里声明,其次在使用正则匹配时,我们首先要知道当前访问的页面的编码方式,这又需要去获取,最后不同的网页并不会固定title标签出现的位置,虽然大致位置一样。

    所以我的想法是,先在回传数据的header里面找到‘content-type’(正常网页的编码方式都会在这里声明)。

    然后获得这个字符串还不是编码方式,还要通过正则匹配匹配 charset:() 括号里面的才是真正的编码方式。

    接着使用这个编码方式去对获取到的html文本解码,再编码成需要的类型(我的pycharm用utf-8)。

    再就是对获取到的文体再正则匹配,这次匹配的是title标签里面的内容。

    最后输出第一个匹配到的内容,输出的时候还要注意不同编码形式的字符串不能相连。

        def getTitle(self):                              #通过正则匹配<title>标签内的字符
            data1 = self.header.get('content-type')
            pattern = re.compile(u"charset=(.*)")
            ress = pattern.findall(data1)
            if not ress:                                 #如果在header列表找不到该网页的编码形式,则在response里匹配
                pattern = re.compile(r"charset=(.*)")
                ress = pattern.findall(self.response)
            if ress:
                temp = self.response.decode(ress[0],'ignore').encode("utf-8")
                xx = u"<title>(.*)</title>"
                pattern = re.compile(xx)
                results = pattern.findall(temp)
                if results:
                    self.print_msg(3, "", results[0])
                    self.title = results[0]
                    if results[0]:
                        self.correct += 1
                else:
                    print u"找不到标题"

    这四个内容都获取到了,就存到mysql数据库里面。


    总的代码如下:

    这是信息获取部分

    # *_*coding:utf-8 *_*
    import Queue
    
    import gevent
    import urllib2
    import socket
    import sys
    import re
    import threading
    import DbSave
    
    class method1:
        def __init__(self,strurl):
            self.domain = ""
            self.ip = ""
            self.port = 0
            self.server = ""
            self.title = ""
            self.correct = 0
            self.problem_url = []
            self.queue = Queue.Queue()
            self.typeencode = sys.getfilesystemencoding()
            if strurl:
                for self.strurl in strurl:
                    if self.check_domain(self.strurl):
                        self.queue.put("http://"+self.strurl)
                    else:
                        print u"域名输入格式不正确"
                        exit(0)
            else:
                print u"没有输入域名"
                exit(0)
            if not self.queue.empty():
                threads = [gevent.spawn(self.declare, i) for i in range(5)]
                try:
                    gevent.joinall(threads)
                except KeyboardInterrupt, e:
                    msg = '[WARNING] User aborted.'
            print self.problem_url
        def declare(self,i):
            while not self.queue.empty():
                url = self.queue.get()
                try:
                    self.domain = url
                    print u"域名:"+url
                    self.urlget(url)
                    self.getIp(url)
                    self.getPort()
                    self.getServerType()
                    self.getTitle()
                    print "-------------------------"
                    DbSave.DbInsert(self.domain, self.ip,int(self.port), self.server, self.title)
                    self.domain = ""
                    self.ip = ""
                    self.port = 0
                    self.server = ""
                    self.title = ""
                    self.correct = 0
                except:
                    print "数据库写入错误"
                if self.correct != 4:
                    self.problem_url.append(url)
                self.correct = 0
        def urlget(self,url):
            try:
                res = urllib2.urlopen(url)       #urllib2的get方法访问url
                self.response = res.read()               #获取正文
                self.header = res.headers                #获取应答头
            except urllib2.URLError,e:
                print u"urllib2访问失败,退出.."
                exit(0)
        def getIp(self,url):
            try:
                str_ip = str(socket.gethostbyname(url[7:]))           #通过socket方式以域名获取IP
                self.print_msg(0, str_ip, "")
                self.ip = str_ip
                if str_ip:
                    self.correct += 1
            except socket.error, e:
                print u"ip获取失败"
        def getPort(self):                                 #通过socket返回端口号
            try:
                str_port = str(socket.getservbyname('http', 'tcp'))
                self.print_msg(1, str_port, "")
                self.port = str_port
                if str_port:
                    self.correct += 1
            except socket.error,e:
                print u"端口号获取失败"
        def getServerType(self):                         #在header字典里寻找Server对应的键值
            self.server = str(self.header.get("Server"))
            self.print_msg(2,self.server, "")
            if self.server:
                self.correct +=1
        def getTitle(self):                              #通过正则匹配<title>标签内的字符
            data1 = self.header.get('content-type')
            pattern = re.compile(u"charset=(.*)")
            ress = pattern.findall(data1)
            if not ress:                                 #如果在header列表找不到该网页的编码形式,则在response里匹配
                pattern = re.compile(r"charset=(.*)")
                ress = pattern.findall(self.response)
            if ress:
                temp = self.response.decode(ress[0],'ignore').encode("utf-8")
                xx = u"<title>(.*)</title>"
                pattern = re.compile(xx)
                results = pattern.findall(temp)
                if results:
                    self.print_msg(3, "", results[0])
                    self.title = results[0]
                    if results[0]:
                        self.correct += 1
                else:
                    print u"找不到标题"
        @staticmethod
        def print_msg(signs, meg, title):
            switcher = {0: u"ip地址:",
                        1: u"端口号:",
                        2: u"服务器信息:",
                        3: u"标题:",
                        4: u"协程开启错误"}
            if meg:
                print switcher.get(signs)+meg
            else:
                print switcher.get(signs).encode("utf-8")+title
        @staticmethod
        def check_domain(domain):
            pattern = re.compile(r'(?i)^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$')
            return pattern.match(domain)
    
    if __name__ == '__main__':
        L = ["www.51.com", "www.baidu.com", "www.1688.com", "www.taobao.com", "www.hao123.com",
             "www.sohu.com", "www.youku.com", "www.taobao.com", "www.ifeng.com", "www.jd.com",
             "www.4399.com", "www.126.com", "www.scnu.edu.cn", "www.163yun.com", "www.58.com",
             "www.37.com", "www.tmall.com", "www.7k7k.com", "www.youxia.com", "sports.cctv.com",
             "www.163.com", "v.qq.com", "www.bilibili.com", "www.hupu.com", "www.qidian.com",
             "www.zol.com", "mail.qq.com", "www.51job.com", "www.liepin.com", "www.10086.cn",
             "www.189.cn", "www.12306.com", "www.10010.com", "www.zol.com", "www.stockstar.com",
             ]
        method1(L)
       


    这是数据库部分:

    # coding=utf-8
    import MySQLdb
    def Dbcreate():
        try:
            conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='pydatabase', port=3306,charset='utf8')
            cur = conn.cursor()
            urlmanager = """CREATE TABLE URLMESSAGE(
                            DOMAIN CHAR(35) NOT NULL,
                            IP  CHAR(15),
                            PORT INT,
                            SERVER VARCHAR(20),
                            TITLE TEXT
                            CHARACTER SET utf8 COLLATE utf8_general_ci
            )
            """
            cur.execute(urlmanager)
            cur.close()
            conn.close()
        except MySQLdb.Error, e:
            print "Mysql Error %d: %s" % (e.args[0], e.args[1])
    def DbInsert(domain, ip, port, server, title):
        try:
            conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='pydatabase', port=3306,charset="utf8")
            cur = conn.cursor()
            cur.execute("INSERT INTO urlmessage(DOMAIN,IP,PORT,SERVER,TITLE) VALUES('%s','%s','%d','%s','%s')"%(domain,ip,port,server,title))
            cur.close()
            conn.commit()
            conn.close()
        except MySQLdb.Error, e:
            print "Mysql Error %d: %s" % (e.args[0], e.args[1])

    尚未解决的问题:

    1:在有些网页得到访问时间过长,会造成阻塞。

    2:某些特殊的网页获取不到编码方式(只有www.qq.com出现这个问题)...

    3:数据库的操作过于粗暴,正常来说不应该这么简单,导致一出现问题数据库就不工作了..

    3:有些网页的标签无法获取。


    解决方法:

    1:应该使用多进程+协程的方法,我只是使用了协程(因为面试有道题目就是用协程,我只是想尝试一下..),通过多进程去设置访问超时时间。

    2:这个问题尚未想到有什么解决的方案...因为只有这个域名出问题..

    3:由于学数据库的时间太短,所以只会很简单的操作。这里我的想法是在信息获取和数据库操作之间加个中间层,设置一个缓存区,这样才可以一次打开数据库进行所有操作,而不是获取一个网页信息就操作一次。还有,数据库操作应该要很谨慎地处理数据,要有很好的异常处理机制(不是像我这样这么粗暴...),注意事务的提交和回滚。

    4:这个问题的原因应该是正则匹配的不正确,因为不同网页HTML文本差的有点远...,暂时还没想到有什么方法..


    还可以提升的部分:

    在获取标题的部分,其实是把整个HTML都匹配一次,但其实我们只需要第一个获取到的title标签的内容.

    输出内容时,不应该每获取到一个信息就调用一次print,可以统一输出。

    好像在bs4的beautlfulsoup方法中有更好的对HTML文本的处理方法




    展开全文
  • js 获取服务器域名ip端口

    千次阅读 2019-03-01 11:36:05
    var pathName=window.document.location.pathname; var curWwwPath=window.document.location.href; var pos=curWwwPath.indexOf(pathName); var prefixUrl=curWwwPath.substring(0,pos); console....
    var pathName=window.document.location.pathname;
        var curWwwPath=window.document.location.href;
        var pos=curWwwPath.indexOf(pathName);
        var prefixUrl=curWwwPath.substring(0,pos);
        console.log("pathName:"+pathName);
        console.log("curWwwPath:"+curWwwPath);
        console.log("pos:"+pos);
        console.log("prefixUrl:"+prefixUrl);

    我丢服务器上,看下结果:

    然后你就知道了吧,取你所需呗~

    展开全文
  • Java获取当前工程ip和端口

    万次阅读 2019-06-28 12:20:16
    参考代码 /** * @notes Getting the IP address of the current machine using Java * * @author bo * * @version 2019年6月26日 上午10:34:02 ... * 获取当前机器端口号 * * @thro...

    参考代码

    /**
     * @notes Getting the IP address of the current machine using Java
     * 
     * @author bo
     * 
     * @version 2019年6月26日 上午10:34:02
     */
    public class NetworkUtils {
    
    	/**
    	 * 获取当前机器端口号
    	 * 
    	 * @throws MalformedObjectNameException
    	 * @throws MBeanException 
    	 * @throws ReflectionException 
    	 * @throws AttributeNotFoundException 
    	 * @throws InstanceNotFoundException 
    	 */
    	public static String getLocalPort() throws Exception {
    		MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
    		Set<ObjectName> objectNames = mBeanServer.queryNames(new ObjectName("*:type=Connector,*"), null);
    		if (objectNames == null || objectNames.size() <= 0) {
    			throw new IllegalStateException("Cannot get the names of MBeans controlled by the MBean server.");
    		}
    		for (ObjectName objectName : objectNames) {
    			String protocol = String.valueOf(mBeanServer.getAttribute(objectName, "protocol"));
    			String port = String.valueOf(mBeanServer.getAttribute(objectName, "port"));
    			// windows下属性名称为HTTP/1.1, linux下为org.apache.coyote.http11.Http11NioProtocol
    			if (protocol.equals("HTTP/1.1") || protocol.equals("org.apache.coyote.http11.Http11NioProtocol")) {
    				return port;
    			}
    		}
    		throw new IllegalStateException("Failed to get the HTTP port of the current server");
    	}
    
    	/**
    	 * 获取当前机器的IP
    	 * 
    	 * @throws UnknownHostException
    	 */
    	public static String getLocalIP() throws Exception {
    		InetAddress addr = InetAddress.getLocalHost();
    		byte[] ipAddr = addr.getAddress();
    		String ipAddrStr = "";
    		for (int i = 0; i < ipAddr.length; i++) {
    			if (i > 0) {
    				ipAddrStr += ".";
    			}
    			ipAddrStr += ipAddr[i] & 0xFF;
    		}
    		return ipAddrStr;
    	}
    
    }
    

    注:获取端口的方法,之前参考了一篇博客,但是在linux服务器上报错,原代码如下:

    public static String getTomcatPort() throws MalformedObjectNameException, NullPointerException {
        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
        Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
                Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
        return objectNames.iterator().next().getKeyProperty("port");
    }
    

    后来把获取的objectNames打印在linux控制台发现,protocol键对应的属性值在windows下是"HTTP/1.1",但是在linux下是"org.apache.coyote.http11.Http11NioProtocol",linux打印日志如下:

    objectNames --------> [Catalina:type=Connector,port=8093, Catalina:type=Connector,port=8100]
    protocol -------------> org.apache.coyote.http11.Http11NioProtocol
    port ---------------> 8093
    protocol -------------> AJP/1.3
    port ---------------> 8100
    

    参考资料

     

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

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

    万次阅读 2016-12-23 13:30:48
    在java中获取URL的域名IP端口获取IP域名方法public static String getIP(String url) { //使用正则表达式过滤, String re = "((http|ftp|https)://)(([a-zA-Z0-9._-]+)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}....
  • netty获取ip和端口

    千次阅读 2019-04-26 23:11:05
    InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();... String clientIP = insocket.getAddress().getHostAddress(); String clientPort = String.valueOf(insocket.getPort());...
  • 前几天写过一个获取远程服务器的IP和端口的程序,从网上查了一些资料顺便加一些自己的理解,希望对大家有所帮助:struts2 获取requestHttpServletRequest requet=ServletActionContext.getRequest();requet....
  • // 取得服务器IP String ip = request.getLocalAddr(); // 取得服务器端口 int port = request.getLocalPort();
  • IP域名和端口号之间的联系

    千次阅读 2020-10-30 11:50:37
    因为用户服务器之间存在代理服务器比如nginx,这个解析到的域名一般是代理服务器的 IP地址(或者IP地址 :80端口 ),代理服务再去转发请求到真正的业务服务器,业务服务器和IP和端口号就跟访问的域名没啥关系了。...
  • Java获取当前服务器域名IP端口

    千次阅读 2017-06-15 11:21:00
    request.getServerName()//获取服务器域名 request.getServerPort()//获取服务器端口 InetAddress address= InetAddress.getByName(request.getServerName()); address.getHostAddress()//获取服务器IP地址 ...
  • 获取IP地址 常用加密解密 字符串压缩 端口扫描 域名解析小弟初始整理功能代码,后续还会继续添加内容,弄的不好请勿吐槽
  • SpringBoot获取项目的ip和端口

    万次阅读 多人点赞 2018-11-07 15:07:57
    import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.net.InetAd....
  • 问题Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非...
  • jsp 获取服务器ip 以及端口

    千次阅读 2017-12-19 15:23:17
    >点击下载模板
  • //返回服务器的端口号 String uri = request.getRequestURI();//返回请求行中的资源名称 String url = request.getRequestURL().toString();//获得客户端发送请求的完整url String ip = request.getRemoteAddr()...
  • 不传参数,直接通过ServletRequestAttributes获取当前项目所在服务器的端口和ip地址 public static String getUrl(){ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) ...
  • 比如www.baidu.com,能用代码获取ip,但是端口号怎么获取。 项目中把分布式服务器做成一张表,存服务器信息,根据项目...更新jar包,需要服务器IP和端口。 但考虑到存在服务器域名隐藏端口问题,哪位大神有解决方案啊
  • ServerWebExchange 中获取处理请求服务器的ip和端口 Connection responseClientConnnection = exchange.getAttribute(ServerWebExchangeUtils.CLIENT_RESPONSE_CONN_ATTR); Connection bind = attribute.bind(); ...
  • 前言 Nginx最为最受欢迎的反向代理负载均衡服务器,被广泛的应用于互联网项目中。这不仅仅是因为Nginx本身比较轻量,更...注意:本文中的客户端信息指的是:客户端真实IP域名、协议、端口。 Nginx反向代理后,Se
  • 写在前面 Nginx最为最受欢迎的反向代理负载均衡服务器,被广泛的应用于互联网项目中。这不仅仅是因为Nginx本身比较轻...注意:本文中的客户端信息指的是:客户端真实IP域名、协议、端口。 Nginx反向代理后,Servle
  • android如何通过代码来获取每个应用访问过的ip和端口 上一章https://blog.csdn.net/zhao007z5/article/details/79976835,通过源码分析,知道了应用访问过的Ip地址和端口都被保存到了文件中,那么只需要不断的监视...
  • 本地调试因缺少端口不能加载静态资源,网上搜的都贴边靠谱,但都没解决,本章解决了有端口时加载静态资源问题 附上参考地址:https://www.sunjs.com/article/detail/196ec851e818426ab55b49b6b75cdc44.html Nginx...
  • Web 服务需要配置监听的 IP 和端口才可以对外提供真正的服务。本文介绍如何设置 ASP.NET Core 程序监听的 IP 和端口。 ASP.NET Core 程序默认集成了 Kestrel 服务器,可以直接对外提供 Web 服务。虽然可以直接提供...
  • 获得主机域名及其IP和Port端口

    千次阅读 2010-01-24 21:15:00
    主程序代码: // 由主机域名获得其IP地址 protected void btnShowLocal_Click(object sender, EventArgs e) { txtaShowAnswer.Value = ""; string strShowAnwser = string.Empty; string strHos

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,429
精华内容 44,571
关键字:

获取域名的ip和端口