精华内容
下载资源
问答
  • 正则表达式验证Ip地址(绝对正确

    万次阅读 多人点赞 2016-02-04 16:39:51
    之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的ip地址,然后就上网找,结果就是没找到一个对的,今天就为大家贡献一下,写个对的,并做一下解析。...

    之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的ip地址,然后就上网找,结果就是没找到一个对的,今天就为大家贡献一下,写个对的,并做一下解析。(建议大家还是去看书去规范的学一下,不要直接百度,不然都是坑)。

    iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式

    我这里的写法没有考虑两种情况,一是172.00.01.3这种,前面以零开头,或者多个零的这种情况,二是本网络地址,如果想支持,可根据下面的解释进行扩展。

    下面给出相对应的正则表达式:

    "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

    +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

    +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

    +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$"

    上面的一个不漏就是正确的验证ip的正则表达式,简单的讲解一下

    \d表示0~9的任何一个数字

    {2}表示正好出现两次

    [0-4]表示0~4的任何一个数字

    | 的意思是或者

    ( )上面的括号不能少,是为了提取匹配的字符串,表达式中有几个()就表示有几个相应的匹配字符串

    1\\d{2}的意思就是100~199之间的任意一个数字

    2[0-4]\\d的意思是200~249之间的任意一个数字

    25[0-5]的意思是250~255之间的任意一个数字

    [1-9]\\d的意思是10~99之间的任意一个数字

    [1-9])的意思是1~9之间的任意一个数字

    \\.的意思是.点要转义(特殊字符类似,@都要加\\转义)

    说到这里应该已经很清楚的知道了上面的正则表达式的意思。

    展开全文
  • 在使用了comments库为网站添加评论系统后,我发现一个奇怪的现象:在admin后台看到的评论者IP地址居然全部都是127.0.0.1,这明显不是真正的客户端IP地址。我去查看了一下comments的源代码,获取客户IP地址的一句代码...

    原文地址: http://newliu.com/post/12/


    在使用了comments库为网站添加评论系统后,我发现一个奇怪的现象:在admin后台看到的评论者IP地址居然全部都是127.0.0.1,这明显不是真正的客户端IP地址。我去查看了一下comments的源代码,获取客户IP地址的一句代码在Python27\Lib\site-packages\django\contrib\comments\views文件里,即:

    ?
    1
    comment.ip_address = request.META.get( "REMOTE_ADDR" , None )

    感觉没有任何问题啊,左思右想得不到要领。这个问题曾困扰过我一段时间,直到有一天我终于把之前看《TheDjangoBook》时跳过的“中间件”一章看了一遍,才搞懂了原委。这事给我的教训就是看书真不能偷懒。下面把这个问题的解决方法记录一下吧。

    thedjangobook里对此问题的解释就是:高流量的站点通常需要将Django部署在负载平衡proxy(参见第20章)之后。这种方式将带来一些复杂性,其一就是每个request中的远程IP地址(request.META["REMOTE_IP"])将指向该负载平衡proxy,而不是发起这个request的实际IP。负载平衡proxy处理这个问题的方法在特殊的 X-Forwarded-For 中设置实际发起请求的IP。 因此,需要一个中间件来确保运行在proxy之后的站点也能在request.META['REMOTE_ADDR']中得到正确的IP。

    解决办法就是:在settings.py中需要添加如下这个中间件(即middleware):

    ?
    1
    'django.middleware.http.SetRemoteAddrFromForwardedFor' ,

    需要注意的是:Djangobook上说SetRemoteAddrFromForwardedFor这个类已经被内置在Django当中了,而事实情况是很多Django版本里它又被移除了,故你需要自己将这个类补进去。

    所以现在我们需要将这个类写入Django源代码当中,文件路径为Lib\site-packages\django\middleware\http.py,具体代码为:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class SetRemoteAddrFromForwardedFor( object ):
    def process_request( self , request):
        try :
            real_ip = request.META[ 'HTTP_X_FORWARDED_FOR' ]
        except KeyError:
            pass
        else :
            # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
            # Take just the first one.
            real_ip = real_ip.split( "," )[ 0 ]
            request.META[ 'REMOTE_ADDR' ] = real_ip

    当然,我们也可以不用在Django源代码上修改,直接在自己的项目中加上这个类也可以。比如在your_project目录下新建文件http.py,然后将上述代码添加进去,再在settings.py文件中这样引用一下即可:

    ?
    1
    ‘your_project.http.SetRemoteAddrFromForwardedFor’,

    经过这个操作,你的Django项目就可以正确的获取客户端的IP地址了。 


    展开全文
  • 本文接着上文的内容,主要解答上文留下的疑问:既然不能使用`InetAddress#getLocalHost()`直接去获取到本机的IP地址,那么如何破呢?...本文将介绍的是一种通用的获取本机IP地址的解决方案,也就是所谓的“正确姿势”。

    程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。

    前言

    本文接着上文的内容,主要解答上文留下的疑问:既然不能使用InetAddress#getLocalHost()直接去获取到本机的IP地址,那么如何破呢?

    本文将介绍的是一种通用的获取本机IP地址的解决方案,也就是所谓的“正确姿势”。


    正文

    为了更好的解释为何InetAddress#getLocalHost()不靠谱,有必要先普及下Linux下的相关文件的解释,比较我们的Java应用绝大部分情况下都是跑在Linux环境下的(甚至国内基本都跑在centos上吧)。


    Linux下/sysconfig/network、hosts、host.conf、resolv.conf文件解释

    这几个文件都位于/etc/目录下,下面分别给出解释和示例:

    • /sysconfig/network此文件是针对本计算机的,是给计算机起的一个名字,是计算机的一个标识。可以使用uname -n 命令来查看本地计算机的计算机名称(比如本例我使用该命令得到的值是l-xxx.syc.prod.ali.qr,也就是配置里的HOSTNAME的值)
    # 支持网络通信
    NETWORKING=yes
    # 主机名,若你不设置默认是localhost.localdomain
    # 使用hostname命令查看到的就是这个值
    HOSTNAME=l-xxx.syc.prod.ali.qr
    # 不启用IPV6的支持
    NETWORKING_IPV6=no
    PEERNTP=no
    
    • hosts不同于network,此文间是在网络上使用的。和Windows系统下的hosts文件相类似,就是一个文本文件,里面存放一些IP和域名的对应关系(注意:都是先ip,后域名)
    127.0.0.1   localhost 
    # ::1表示的时ipv6的本地地址,也就是0000:0000:0000:0000:0000:0000:0000:0001
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    # 内网ip地址 -> 主机名  的映射关系
    10.102.1.153 l-xxx.syc.prod.ali.qr
    
    • host.conf:解析顺序/方式,属于一种规则配置。
    # 这里规定先使用DNS来解析域名,然后再查询“/etc/hosts”文件(也可以相反,你调个顺序即可)
    order bind,hosts
    # 指定是否“/etc/hosts”文件中指定的主机可以有多个地址
    multi on
    
    • resolv.confDNS服务器的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件由域名解析器来读取(下面会有Java代码示例)
      • 格式:每行以一个关键字开头,后接一个或多个由空格隔开的参数
      • 可选的关键字有:
        • nameserver:(最重要,此关键字必选,其它可选)定义DNS服务器的IP地址,可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。
        • domain:定义本地域名/主机的域名
        • search:定义域名的搜索列表
          • search和domain不能共存,如果同时存在,以最后出现的为准。
        • sortlist:对返回的域名进行排序,如sortlist 130.155.160.0/255.255.240.0 130.155.0.0
        • options:用于配置resolver的内置变量,不是resolv.conf的常见配置。语法如下:options [option] ...
          • ndots:[n]:设置调用res_query()解析域名时域名至少包含的点的数量
          • timeout:[n]:设置等待dns服务器返回的超时时间,单位秒。默认值5
          • attempts:[n]:设置resolver向DNS服务器发起域名解析的请求次数。默认值2
    # 一般是内网DNS服务器地址,这样就可以解析你的内网域名了喽
    nameserver 202.102.192.68
    nameserver 202.102.192.69
    search qq.com baidu.com
    options  no-check-names
    options  attempts:1
    options  timeout:1
    

    了解了这些概念后,接下来就得认识InetAddress这个API了。本文将会演示它在windows上(本机)以及Linux下运行的案例,会有差异,请注意区分。


    直接使用getLocalHost()获取本机IP的错误示例

    标题已经很明显指出了:这是错误示例。我相信绝大部分小伙伴获取本机IP都后悔这么用:

    public static void main(String[] args) throws UnknownHostException {
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost.getHostAddress());
    }
    

    运行程序,在不同的操作系统上值可能还不一样:

    • 在windows上:192.168.199.175
      • 在windows上看似正常。但是但是但是,请你开一个vpn再运行试一下,定会让你大跌眼镜(比如我开启公司的vpn后,输出的值是2.0.0.137
      • 可以看到当出现多个网卡接口工作时,windows可能就不好使了,而多个网卡同时工作的情况是很正常的(比较虚拟网卡经常很多)
    • 在Linux上:127.0.0.1
      • what?

    为何在Linux下请你一定不要使用它来获取本机IP,因为它就是简单的读取/etc/hosts的内容,所以它默认返回的是127.0.0.1非常的不靠谱,因此本方法十分不建议在生产上使用

    /etc/hosts的第一行一般均是:127.0.0.1 localhost,所以返回值是127.0.0.1(倘若你把第一行改为127.1.1.1 localhost,那么它的返回值就是127.1.1.1了)


    获取本机IP地址的正确姿势

    关于获取本机地址的正确姿势,主要分为如下两种场景展开说明。

    简单情况(废弃)

    简单情况下,就可以通过InetAddress.getLocalHost()来获取到本机ip地址。注意这里的关键词:简单。因此它对环境是有要求的:

    1. windows环境
    2. 非多网卡协同工作环境(比如不能开启vpn)

    很明显,这种“简单”情况在实际生产中并不存在,因此仅限yy,不可使用。

    复杂情况(通用,推荐的方案)

    它是一种通用方案,推荐使用在实际的代码中。

    public static void main(String[] args) throws UnknownHostException {
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost.getHostAddress());
    
        System.out.println("----------------下面才是正确的获取方式----------------");
        localHost = getLocalHostExactAddress();
        System.out.println(localHost.getHostAddress());
        // System.out.println(localHost.getHostName());
    }
    
    
    public static InetAddress getLocalHostExactAddress() {
        try {
            InetAddress candidateAddress = null;
    
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface iface = networkInterfaces.nextElement();
                // 该网卡接口下的ip会有多个,也需要一个个的遍历,找到自己所需要的
                for (Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
                    InetAddress inetAddr = inetAddrs.nextElement();
                    // 排除loopback回环类型地址(不管是IPv4还是IPv6 只要是回环地址都会返回true)
                    if (!inetAddr.isLoopbackAddress()) {
                        if (inetAddr.isSiteLocalAddress()) {
                            // 如果是site-local地址,就是它了 就是我们要找的
                            // ~~~~~~~~~~~~~绝大部分情况下都会在此处返回你的ip地址值~~~~~~~~~~~~~
                            return inetAddr;
                        }
    
                        // 若不是site-local地址 那就记录下该地址当作候选
                        if (candidateAddress == null) {
                            candidateAddress = inetAddr;
                        }
    
                    }
                }
            }
    
            // 如果出去loopback回环地之外无其它地址了,那就回退到原始方案吧
            return candidateAddress == null ? InetAddress.getLocalHost() : candidateAddress;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    

    在windows运行输出(即使你开了vpn都木有关系的哦):

    2.0.2.81
    ----------------下面才是正确的获取方式----------------
    192.168.199.175
    

    在Linux下运行输出:

    127.0.0.1
    ----------------下面才是正确的获取方式----------------
    10.102.11.29
    

    可以看到通过这种方式获取本机IP,不管是windows or Linux,亦不管是开启了vpn与否,最终均能得到正确的结果。




    最后最为辅助材料,介绍下InetAddress的其它方法们。

    InetAddress的其它实例方法们介绍

    //获取主机名
    public String getHostName();
    //获取主机名(每次方法都解析DNS去获取主机名,而不从缓存中获取)
    public String getCanonicalHostName();
    //获取以字节数组形式的ip地址。
    public byte[] getAddress();
    //获取点分四段式ip。
    public String getHostAddress();
    
    //可以根据指定timeout时间内测试网络是否可达,是否可以建立连接。
    public boolean isReachable(int timeout);
    //可以指定从本机那个网卡、生存时间ttl 和指定时间来测试网络是否可达。
    public boolean isReachable(NetworkInterface netif, int ttl, int timeout);
    
    // 当IP地址是广播地址(MulticastAddress)时返回true,否则返回false。
    // 通过广播地址可以向网络中的所有计算机发送信息,而不是只向一台特定的计算机发送信息。
    // IPv4的广播地址的范围是224.0.0.0 ~ 239.255.255.255
    // IPv6的广播地址第一个字节是FF 其他的字节可以是任意值。
    public boolean isMulticastAddress();
    // 当IP地址是通配符地址时返回true,否则返回false。
    // IPv4的通配符地址是0.0.0.0
    // IPv6的通配符地址是0:0:0:0:0:0:0:0,也可以简写成::。
    public boolean isAnyLocalAddress();
    // 当IP地址是loopback地址时返回true,否则返回false。loopback地址就是代表本机的IP地址。
    // IPv4的loopback地址的范围是127.0.0.0 ~ 127.255.255.255,也就是说,只要第一个字节是127,就是lookback地址。
    // IPv6的loopback地址是0:0:0:0:0:0:0:1,也可以简写成::1
    public boolean isLoopbackAddress();
    // 当IP地址是本地连接地址(LinkLocalAddress)时返回true,否则返回false。
    // IPv4的本地连接地址的范围是169.254.0.0 ~ 169.254.255.255。
    // IPv6的本地连接地址的前12位是FE8,其他的位可以是任意取值,如FE88::和FE80::ABCD::都是本地连接地址。
    public boolean isLinkLocalAddress();
    // 当IP地址是地区本地地址(SiteLocalAddress)时返回true,否则返回false。(是不是内网ip)
    // IPv4的地址本地地址分为三段:10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255
    // (企业内部或个人内部的局域网内部的ip都应该在此三个网段内 因为内网用ipv4足够)
    // IPv6的地区本地地址的前12位是FEC,其他的位可以是任意取值,如FED0:: 和 FEF1:: 都是地区本地地址。
    public boolean isSiteLocalAddress();
    
    
    // 当IP地址是全球范围的广播地址时返回true,否则返回false。全球范围的广播地址可以向Internet中的所有的计算机发送信息。
    // IPv4的广播地址除了224.0.0.0和第一个字节是239的IP地址都是全球范围的广播地址
    // IPv6的全球范围的广播地址中第一个字节是FF,第二个字节的范围是0E ~ FE,其他的字节可以是任意值,如FFBE::、FF0E::都是全球范围的广播地址。
    public boolean isMCGlobal();
    // 当IP地址是本地接口广播地址时返回true,否则返回false。
    // 本地接口广播地址不能将广播信息发送到产生广播信息的网络接口,即使是同一台计算机的另一个网络接口也不行。
    // 所有的IPv4广播地址都不是本地接口广播地址。IPv6的本地接口广播地址的第一个字节是FF,第二个节字的范围是01 ~ F1,
    // 其他的字节可以是任意值,如FFB1::、FF01:A123::都是本地接口广播地址。
    public boolean isMCNodeLocal();
    // 当IP地址是子网广播地址时返回true,否则返回false。
    // IPv4的子网广播地址的范围是224.0.0.0 ~ 224.0.0.255。
    // IPv6的子网广播地址的第一个字节是FF,第二个字节的范围是02 ~ F2,其他的字节可以是任意值,如FFB2:: 和 FF02:ABCD:: 都是子网广播地址。
    public boolean isMCLinkLocal();
    // 当IP地址是站点范围的广播地址时返回true,否则返回false。 
    // 使用站点范围的广播地址,可以向站点范围内的计算机发送广播信息。
    // IPv4的站点范围广播地址的范围是239.255.0.0 ~ 239.255.255.255,如239.255.1.1、239.255.0.0都是站点范围的广播地址。
    // IPv6的站点范围广播地址的第一个字节是FF,第二个字节的范围是05 ~ F5,其他的字节可以是任意值,如FF05:: 和 FF45:: 都是站点范围的广播地址。
    public boolean isMCSiteLocal();
    // 当IP地址是组织范围的广播地址时返回ture,否则返回false。
    // 使用组织范围广播地址可以向公司或企业内部的所有的计算机发送广播信息。
    // IPv4的组织范围广播地址的第一个字节是239,第二个字节不小于192,第三个字节不大于195,如239.193.100.200、239.192.195.0都是组织范围广播地址。
    // IPv6的组织范围广播地址的第一个字节是FF,第二个字节的范围是08 ~ F8,其他的字节可以是任意值,如FF08:: 和 FF48::都是组织范围的广播地址。
    public boolean isMCOrgLocal();
    

    总结

    关于InetAddress的所有内容就介绍到这,相信经过此两篇内容的讲解后,你对Java处理域名解析,以及获取本地IP地址时将不会再胆怯,干吧。另外,其实上Java该有更高级的功能:

    • 自己指定DNS地址,形如这样:
    // 这么一来我们的hostName域名都将交给`114.114.114.114`去帮我们完成解析
    System.setProperty("sun.net.spi.nameservice.nameservers", "114.114.114.114"); 
    
    • 自己指定DNS服务的提供者:
    // 若你没指定此key,那就是default。默认就会使用系统自带的DNS
    // `dns,sun`的意思是:会使用`sun.net.spi.nameservice.nameservers`配置指定的DNS来解析
    System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
    

    这些内容几乎很少会涉及到,因此本文并没必要展开。


    关注A哥

    AuthorA哥(YourBatman)
    个人站点www.yourbatman.cn
    E-mailyourbatman@qq.com
    微 信fsx641385712
    活跃平台
    公众号BAT的乌托邦(ID:BAT-utopia)
    知识星球BAT的乌托邦
    每日文章推荐每日文章推荐

    BAT的乌托邦

    往期精选

    展开全文
  • 如何配置Linux系统的IP地址

    万次阅读 多人点赞 2017-03-20 08:28:08
    如何配置Linux系统的IP地址,使其能够连接局域网甚至外网。其实这并不难,Linux系统网络配置的方法有多种。下面,以VMware虚拟机中的Linux系统为例,进行讲解。我的真实机是Windows系统,网络连接的详细信息如下:已...

    如何配置Linux系统的IP地址,使其能够连接局域网甚至外网。其实这并不难,Linux系统网络配置的方法有多种。

    下面,以VMware虚拟机中的Linux系统为例,进行讲解。

    我的真实机是Windows系统,网络连接的详细信息如下:

    已启用DHCP:是
    IP地址:192.168.1.2
    子网掩码:255.255.255.0
    默认网关:192.168.1.1
    DHCP服务器:192.168.1.1
    DNS服务器:192.168.1.1

    并且,该真实机的Windows系统可以连接外网。

    真实机中开启了一台VMware虚拟机,装的Linux系统版本是CentOS6.6。

    首先,介绍一下测试网络连通性的命令ping。

    测试网络连通性 ping

    基本语法:ping [-选项] IP地址或域名
    功能描述:测试网络是否连通
    常用选项:-c
    -c 指定发送数据包的次数

    常见用法:

    ping 192.168.1.2
    测试Linux主机与局域网内的其他主机192.168.1.2的连通性,默认会一直发送数据包。
    可用 Ctrl+C 强制终止当前命令。
    
    ping -c 3 192.168.1.1
    测试内网的连通性,只发送3次数据包。
    
    ping -c 3 www.baidu.com
    对外网的域名进行ping操作,可以测试本机是否连通了外网。

    配置Linux系统的IP地址的方法,主要有以下三种:

    • ifconfig
    • setup
    • 修改网卡的配置文件

    说明: 这三种方法对真实的Linux服务器也有效,但强力推荐大家用第三种方法配置IP地址。

    1. ifconfig

    命令名称:ifconfig
    基本语法:ifconfig [网卡标识] [IP地址]
    英文原意:interface configuration
    执行权限:root
    功能描述:查看或临时配置网卡信息

    说明: ifconfig 命令主要是用来查看网卡的配置信息,因为用它来配置网卡的IP地址时,只会临时生效(Linux服务器重启后就会失效)。要想使本地网卡(eth0)的配置永久生效,需要修改其配置文件/etc/sysconfig/network-scripts/ifcfg-eth0。

    先用ifconfig命令查看一下网卡的基本信息。

    ifconfig
    查看Linux服务器的网卡的相关信息。

    结果如下:

    [root@localhost ~]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:3E:9C:06  
              inet addr:192.168.200.128  Bcast:192.168.200.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe3e:9c06/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:2326 errors:0 dropped:0 overruns:0 frame:0
              TX packets:520 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:161222 (157.4 KiB)  TX bytes:51780 (50.5 KiB)
              Interrupt:19 Base address:0x2000 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

    说明:

    eth0 表示第1块本地网卡,它是按照数字顺序来命名的。
    如果有第2块本地网卡,就叫eth1。
    通常,我们主要会查看本地网卡的mac地址(HWaddr 00:0C:29:3E:9C:06)和IP地址(inet addr:192.168.200.128)。
    
    lo 表示本地回环网卡。
    
    如果你在查看网卡信息时,没有本地网卡eth0这一项。很可能是因为本地网卡默认没有启动。
    可先修改它的配置文件/etc/sysconfig/network-scripts/ifcfg-eth0。
    
    加上如下代码,来启动Linux主机的本地网卡:
    ONBOOT=yes
    
    保存退出后,运行下面的命令,重启网络服务,使网卡配置文件立即生效:
    service network restart
    再来运行ifconfig即可。

    如果本地网卡eth0已经启动,就可以用下面的命令临时设置IP地址:

    ifconfig eth0 192.168.1.3
    临时配置本地网卡eth0的IP地址,Linux重启就会失效。
    
    这种配置ip的方式只能设置IP和子网掩码,估只适合内网(局域网)使用。
    如果想连通外网,还必须设置网关和DNS。

    总结: ifconfig命令主要还是用来查看网卡的基本信息,如果用它来临时配置IP地址,局限性太多,故不推荐。

    2. setup

    setup 命令是 redhat 系列的linux系统(如CentOS)中专有的命令工具。

    可以使用 setup 命令,来对网络配置中的IP地址、子网掩码、默认网关、DNS服务器进行设置。而且,setup 网络配置工具设置的IP地址会永久生效。

    具体设置请查看 http://blog.csdn.net/lamp_yang_3533/article/details/53310844#t9 中的第10小节网络配置。

    总结: setup命令工具虽然也有一点局限性,但它的图形化设置界面非常方便,而且网络配置也会自动写入网卡配置文件,进而永久生效。并且,只要你家有外网,你的Linux也能够连通外网。故推荐使用该方法。

    3. 修改网卡的配置文件

    本地网卡的配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0。

    直接修改网卡的配置文件,设置方法有两种:

    • 自动获取动态IP地址
    • 手工配置静态的IP地址

    3.1 自动获取动态IP地址

    也就是通过路由器的DHCP功能,使Linux主机自动获取IP地址。

    设置方法如下:

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    编辑本地网卡的配置文件

    主要查看下面这两项是否和下面给出的一致即可。

    ONBOOT=yes
    BOOTPROTO=dhcp

    第一项是确保本地网卡eth0开启。

    第二项是使用dhcp,自动获取IP地址、子网掩码、网关和DNS。

    然后,执行下面的命令,重启网络服务即可。

    service network restart     
    重启网络服务,使配置文件生效

    3.2 手工配置静态的IP地址

    也就是手工配置IP地址、子网掩码、网关和DNS。

    设置方法如下:

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    编辑本地网卡的配置文件

    主要查看下面这几项是否和下面给出的一致即可。

    ONBOOT=yes
    BOOTPROTO=none
    IPADDR=192.168.1.66
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=192.168.1.1

    第二项表示不使用dhcp服务,如果是手动配置静态的ip地址,BOOTPROTO的值可以为none或者static。

    第三项表示设置IP地址。

    第四项表示设置子网掩码。

    第五项表示设置网关。

    第六项表示设置首选DNS服务器,其实DNS有自己的配置文件/etc/resolv.conf,在这里设置DNS,就是把它写入了DNS的配置文件/etc/resolv.conf。

    然后,执行下面的命令,重启网络服务即可。

    service network restart 

    说明: 如果是虚拟机的Linux,使用“手工配置静态的IP地址”的话,必须将此虚拟机的网络适配器(即网卡)的网络连接的模式设置为桥接模式。

    不管怎样,无论是“自动获取动态IP地址”还是“手工配置静态的IP地址”,都能实现配置Linux的IP地址,而且是永久生效。并且,只要你家有外网,你的Linux也能够连通外网。但我更倾向于使用“自动获取动态IP地址”,因为它更方便。

    总结: 修改网卡的配置文件这个方法非常有效,几乎没有局限性,故大力推荐。

    4. 虚拟机的网络连接模式

    就VMware虚拟机而言,常用的网络连接的模式有三种:

    • NAT模式(默认模式)
    • 仅主机模式
    • 桥接模式

    查看和设置网络连接的模式的方法是:虚拟机 → 设置 → 网络适配器,在设备状态处,勾选“已连接”和“启动时连接”;在网络连接处,选择合适的模式。

    这三种网络连接模式有一定的区别,下面逐一说明。

    4.1 NAT模式

    选择NAT模式时,虚拟机的IP应该和真实机中的VMnet8(虚拟网卡)的IP(比如:192.168.200.1)同网段,才能保证虚拟机和真实机的连通。

    4.2 仅主机模式

    选择仅主机模式时,虚拟机的IP应该和真实机中的VMnet1(虚拟网卡)的IP(比如:192.168.224.1)同网段,才能保证虚拟机和真实机的连通。

    注意: 在仅主机模式时,就算你家有外网,虚拟机也只能连通内网,而无法连通外网。

    4.3 桥接模式

    选择桥接模式时,虚拟机的IP应该和真实机中已经连上外网的网卡(本地网卡或无线网卡)的IP(比如:192.168.1.2)同网段,才能保证虚拟机和真实机的连通。

    总结: 如果你家有外网,要想让虚拟机中的Linux主机也连通外网,可以选择“NAT模式”或者“桥接模式”,但不能使用“仅主机模式”。也就是说,“仅主机模式”有一定的局限性,它只能让虚拟机连通局域网,而其他两种模式,只要网络配置正确,则没有局限性。

    展开全文
  • python匹配ip地址

    万次阅读 2016-08-18 20:45:08
    python匹配ip地址
  • IP地址,子网掩码、默认网关,DNS服务器是什么意思? IP地址,子网掩码、默认网关,DNS服务器是什么意思? (一)问题解析 001. 问:IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能...
  • IP地址中的网络地址和主机地址分别是什么意思?

    千次阅读 多人点赞 2020-02-21 20:09:44
    一个IP地址的网络部分被称为网络号或者网络地址,主机可以与具有相同的网络号的设备直接通讯,在没有连接设备的情况下,即使共享相同的物理网段,网络号不同则无法进行通讯,IP 地址的网络地址使路由器可以将分组置于...
  • IP地址,子网掩码、默认网关,DNS服务器是什么意思? (一) 问题解析 问: IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,...
  • IP地址和子网掩码的关系, 如何计算网络地址?

    万次阅读 多人点赞 2019-05-17 15:13:29
    ip地址通常用更直观的,以圆点分隔号的四个十进制数字表示,每个数字从0到255,如某一台主机的ip地址为:128.20.4.1在局域网里,同样也需要ip地址,一般内网的ip地址是以192.168开头的,这样...
  • Java正则表达式验证IP地址

    千次阅读 2019-07-04 22:03:38
    IP 地址是网络上每台计算机的唯一标识,因此 IP 地址的错误输入将使程序无法运行。下面使用前面学习的正则表达式知识,编写一个 Java 程序来验证 IP 地址是否合法。 在定义正则表达式之前,首先要知道一个正确 IP ...
  • IP地址格式

    万次阅读 2017-05-15 18:38:12
    使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示格式,关于这一点,如果你还不知道,亦或对相关的知识还有所迷惑,本文对... IP地址是IP网络中数据传输的依据,
  • 001. 问: IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真奇怪,我的计算机没设DNS,竟然能上QQ,却不能...
  • 了解IP地址及如何设置IP地址

    千次阅读 2007-05-10 19:57:00
    众所周知,在电话通讯中,电话用户是靠电话号码... 什么是IP地址 所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。 按照TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Int
  • 情况,wifi已经输入密码正确,但是中间出现灰色的wifi图标,还有一个叹号,说是没有IP地址 解决方法: 1 试过重启 2 试过删掉该网络再重新输入密码 3 试过删掉WiFi一栏 来自百度: 最佳答案: 1、首先打开偏好设置,...
  • IP 别名和辅助 IP 地址

    千次阅读 2017-01-25 12:05:13
    概述IP 别名(IP Alias),辅助ip地址(Secondary IP Address)
  • 如何查看IP地址是否被占用

    万次阅读 2015-01-05 19:19:08
    下面就为大家分享3种简单地如何查看ip地址是否被占用的方法。 1.ping   windows键+R 快捷打开cmd命令行程序,进入命令行提示符状态,在命令行中输入“ping 你想要查看的是否被占用ip地址”回车。如果ping得通,...
  • TortoiseSVN是很多人特别是程序员经常使用的工作追述工具,在长期使用过程中难免会遇到服务器迁移ip地址变更的问题。那么在服务器ip地址变化之后,我们要如何继续使用呢?步骤其实非常简单,下面我们一起修改一下吧...
  • 在小型网络中,因为计算机数量不多,网络管理员一般采用手工分配IP地址的方法为每台计算机分配静态IP地址,而随着网络不断扩展,应用领域不断扩大,网络在企业中的应用日益普及,发展到中、大型网络,计算机的数量...
  • 如何判断某一个IP地址是否被占用

    千次阅读 2019-01-30 23:06:46
    在一个局域网中,我们的IP地址要求唯一性,如果设置的IP地址已经被利用,虚拟机就无法创建成功或者出现其他无法预料的事情。 那么我们应该用什么办法来判断某个IP地址是否已经被占用呢?我们我知道的有两个方法: ...
  • 合法IP地址判断

    万次阅读 2018-04-21 17:02:21
    iPv4的ip地址都是(1~255).(0~255).(0~255).(0~255)的格式 下面给出相对应的正则表达式: “^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.” +”(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.” +”(1\d{2}|2[0...
  • 判定IP地址合法性的三种方法

    千次阅读 2020-11-03 10:42:58
    IP IP合法性校验是开发中非常常用的,看起来很简单的判断,作用的确很大,写起来...若匹配则是正确IP地址,否则不是正确IP地址下面给出相对应的验证ip的正则表达式: ^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|
  • centos8配置静态IP地址

    万次阅读 2020-06-20 07:44:27
    nmcli配置静态IP地址 查看当前网络连接 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 71d82a64-c7ec-4d60-8f15-ff6a3de87d52 ethernet ens33 直接修改当前网卡静态IP地址 nmcli con ...
  • python 获取hostname以及ip地址

    千次阅读 2019-03-23 14:25:29
    在使用python进行编程时,若需要获取运行主机的名字以及ip地址时,可以导入socket模块。 首先在linux系统下我们使用hostname命令查看当前系统的hostname: [root@lixxxx ~]# hostname lixxxx.members.linode.com ...
  • Python 获取本机 IP 地址

    千次阅读 2019-09-08 10:41:47
    在参考网上获取 IP 地址的代码,具体实现如下: import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl....
  • 如何为CentOS 7配置静态IP地址

    千次阅读 2015-06-05 17:19:50
    问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址? 如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的...
  • 算法—判断字符串是否为IP地址

    千次阅读 多人点赞 2020-08-04 10:21:18
    今天在这里和小伙伴记录一下判断字符串是否是IP地址的算法, 实现该算法我们首先应该知道,IP地址应该依据哪些条件: 判断原则: 判断该字符长度是否是7-15位之间(0.0.0.0-255.255.255.255.255) 是否能...
  • 细说ip地址与同一网段

    万次阅读 2017-09-03 09:49:22
    大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,418
精华内容 85,767
关键字:

下面正确的ip地址是