精华内容
下载资源
问答
  • 然而这就面临一个问题,如何将公网和私网的流量分开统计呢?特别是当机器流量异常的时候,如何快速的判断流量是来自公网还是私网。当然云厂商一般也提供了eip的监控,然而很多公司也有一套自己的监控,对于自建监控...

    目前很多公司业务已经上云,使用了大量的云主机。当前大多数云厂商的云主机公网都是采用的eip,也就是内网和外网使用的同一张网卡,所以流量全部经过的同一个网卡。然而这就面临一个问题,如何将公网和私网的流量分开统计呢?特别是当机器流量异常的时候,如何快速的判断流量是来自公网还是私网。当然云厂商一般也提供了eip的监控,然而很多公司也有一套自己的监控,对于自建监控如何实现,这就值得思考了。
    本文将采用python实现云主机的公网和私网流量分开统计,可以将结果输入到自建监控中,当发生业务故障时,可以快速定位问题。

    1. iftop

    iftop是linux系统下面一个监控主机与外部通信的工具,它可以实时监控本机与外部机器的流量大小,需要自行下载安装包编译安装。iftop类似与linux系统自带的top命令,在屏幕终端动态输出监控结果。同时,iftop支持很多参数可选项,其中-t 参数使用不带ncurses的文本界面,可以实现将结果保存到文件。

    2. os.popen函数

    os是python的系统模块,os.popen可以调用系统的shell命令,相当于直接在shell终端执行shell命令。

    3. 实现思路

    使用python的os.open来调用iftop命令获取到和主机通信的所有ip的流量大小。然后分别分析公网和私网的流量,将各自的流量之和统计起来,从而实现分别监控系统的公网和私网流量。

    4. 代码实现

    # -*- coding:utf-8 -*-
    """
    @Author: Rainbowhhy
    @Date: 2020-11-14 15:16:18
    """
    
    import os, re
    
    
    def is_public_ip(ip):
        # 判断ip是公网还是私网
        private = re.findall(
            r'^((192\.168)|(198\.18)|(198\.19)|(10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d))|(172\.(1[6-9]|2[0-9]|3[0-1])))\.(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)
        if private:
            return 0
        else:
            return 1
    
    
    def convert_unit(unit):
        # 统一转换成bit后计算
        if "Gb" in unit:
            flow = float(unit.strip("Gb")) * 1024 * 1024 * 1024
        elif "Mb" in unit:
            flow = float(unit.strip("Mb")) * 1024 * 1024
        elif "Kb" in unit:
            flow = float(unit.strip("Kb")) * 1024
        else:
            flow = float(unit.strip("b"))
        return flow
    
    
    def get_traffic():
        # 调用iftop命名获取公网和私网流量
        iftop_info = os.popen("iftop -t -N -n -s 4 2>/dev/null | grep -A 1 -E '^   [0-9]'").read()
        iftop_list = iftop_info.split("\n")
        count = len(iftop_list) - 1
        public_traffic_send = 0
        public_traffic_recv = 0
        private_traffic_send = 0
        private_traffic_recv = 0
        public_ips = []
        private_ips = []
        for i in range(int(count / 2)):
            # 获取出向流量信息
            traffic_send = iftop_list[i * 2]
            traffic_send_lists = traffic_send.split(" ")
            while "" in traffic_send_lists:
                traffic_send_lists.remove("")
            traffic_send = traffic_send_lists[3]
            traffic_send_float = convert_unit(traffic_send)
    
            # 获取入向流量信息
            traffic_recv = iftop_list[i * 2 + 1]
            traffic_recv_lists = traffic_recv.split(" ")
            while "" in traffic_recv_lists:
                traffic_recv_lists.remove("")
            ip = traffic_recv_lists[0]
            traffic_recv = traffic_recv_lists[2]
            traffic_recv_float = convert_unit(traffic_recv)
    
            # 计算公网和私网的总流量
            if is_public_ip(ip):
                public_ips.append(ip)
                public_traffic_send += traffic_send_float
                public_traffic_recv += traffic_recv_float
    
            else:
                private_ips.append(ip)
                private_traffic_send += traffic_send_float
                private_traffic_recv += traffic_recv_float
        return public_traffic_send, public_traffic_recv, private_traffic_send, private_traffic_recv
    
    
    if __name__ == '__main__':
        public_traffic_send, public_traffic_recv, private_traffic_send, private_traffic_recv = get_traffic()
        print("公网入向:%.1f" % public_traffic_recv)
        print("公网出向:%.1f" % public_traffic_send)
        print("私网入向:%.1f" % private_traffic_recv)
        print("私网出向:%.1f" % private_traffic_send)
    
    

    5. 输出结果截图

    如下图是输出结果展示
    在这里插入图片描述

    展开全文
  • 采用链式处理,先尝试获取公网IP,获取不到时再尝试获取内网IP...//获取本机的公网和私网IP private string GetIP() { List<string> urls = new List<string>() { "http:/...

    采用链式处理,先尝试获取公网IP,获取不到时再尝试获取内网IP,再获取不到时赋给默认值。

    //获取本机的公网和私网IP
            private string GetIP()
            {
                List<string> urls = new List<string>() 
                { 
                 "http://bot.whatismyipaddress.com/",
                "http://ipinfo.io/ip",
                "https://canihazip.com/s",
                "http://icanhazip.com"
                };
                
                string tempip = "";
                try
                {
                    foreach (var ipurl in urls)
                    {
                        try
                        {
                            WebRequest request = WebRequest.Create("http://icanhazip.com");
                            request.Timeout = 10000;
                            WebResponse response = request.GetResponse();
                            Stream resStream = response.GetResponseStream();
                            StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
                            string htmlinfo = sr.ReadToEnd();
                            //匹配IP的正则表达式
                            System.Text.RegularExpressions.Regex r = new Regex("((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|[1-9])", RegexOptions.None);
                            Match mc = r.Match(htmlinfo);
                            //获取匹配到的IP
                            tempip = mc.Groups[0].Value;
    
                            resStream.Close();
                            sr.Close();
                            break;
                        }
                        catch
                        {
                            
                        }
                    }
                    return tempip;
                }
                catch
                {
                    SendLog("获取当前设备的公网IP失败,尝试获取当前设备的私网IP");
                    try
                    {
                        return GetLocalIPAddress();
                    }
                    catch
                    {
                        SendLog("获取当前设备的私网IP失败,赋予默认值127.0.0.1");
                        return "127.0.0.1";
                    }
                }
            }
    
            #region GetLocalIP
            private string GetLocalIPAddress()
            {
                var host = Dns.GetHostEntry(Dns.GetHostName());
                foreach (var ip in host.AddressList)
                {
                    if (ip.AddressFamily == AddressFamily.InterNetwork)
                    {
                        return ip.ToString();
                    }
                }
                throw new Exception("No network adapters with an IPv4 address in the system!");
            }
    
    展开全文
  • 公网和私网

    2020-03-20 10:37:30
    公网IP,是在互联网上使用的,在任何地方只有能连网都能访问公网IP。 而私有IP是局域网所使用的,通过互联网是不能访问私有IP的。

    公网IP,是在互联网上使用的,在任何地方只有能连网都能访问公网IP。
    而私有IP是局域网所使用的,通过互联网是不能访问私有IP的。

    展开全文
  • 文章目录公网/外网私网/内网组建私网的原因组建私网的网络号 公网/外网 就是我们通常所说的互联网 私网/内网 一个私有网络,仅限于内部通信 组建私网的原因 IP地址不够用的解决方法: 1.DHCP动态地址分配 2.NAT网络...


    公网/外网

    就是我们通常所说的互联网

    私网/内网

    一个私有网络,仅限于内部通信

    组建私网的原因

    IP地址不够用的解决方法:
    1.DHCP动态地址分配
    2.NAT网络地址转换(主要就是用于组建私网,私网中的主机能内部通信,或者使用统一一个对外的IP地址上网)
    在这里插入图片描述
    私网之间,只要网络不相邻,网络号就可以相同,分配的IP地址就可以冲突(因为对外上网就会通过NAT服务转换为对外的地址进行上网,对外来说没有冲突)

    组建私网的网络号

    注意不能随便使用,与公网上某个网络冲突了就不合适了
    可以组建私网的有以下几种:
    10. * . * . * ----用于组建大型私网
    172.16. * . * ~ 172.31. * . * -----用于组建中型私网
    192.168. * . *----用于组建小型私网

    展开全文
  • 今天遇到一个客户,说网络没有办法,公网和私网只能在一个网段里面 我也是从来没遇到过这种情况,一般都是私网独立网段。 结果在安装rac时就出现问题 installer -silent时报错: Installer has detected that ...
  • 公网和私网、配置内外网通用

    千次阅读 2018-11-29 23:03:07
    IPv4公网 A类IP地址1.0.0.0 -126.0.0.0 B类IP地址128.0.0.0-191.255.255.255 C类IP地址192.0.0.0-223.255.255.255 私网: A类:10.0.0.0-10.255.255.255 ...B类:172.16.0.0-172.31.255.255 ...私网不能在...
  • 公网 私网IP

    2014-04-11 13:27:34
    公网、内网是两种Internet的接入方式。 内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式: 10.x.x.x 172.16.x.x至172.31.x.x 192.168.x.x 内网的计算机以NAT(网络地址转换)...
  • 公网IP和私网IP

    2021-02-16 11:20:17
    这期主要来区分一下公网IP和私网IP。   我们都听过IP地址,但对公网IP和私网IP可能就比较挠头了。把IP的问题放在一边,我们先来说一下什么是公网,什么是私网。公网又名广域网、外网,指的就是互联网。私网又名...
  • 然而这就面临一个问题,如何将公网和私网的流量分开统计呢?特别是当机器流量异常的时候,如何快速的判断流量是来自公网还是私网。当然云厂商一般也提供了eip的监控,然而很多公司也有一套自己的监控,对于自建监控...
  • 文章目录实验拓扑图实验目的配置命令测试 ...实现公网主机和私网主机都能通过公网IP访问私网服务器 配置命令 // 配置缺省路由 [AR1]ip route-static 0.0.0.0 0 11.11.11.2 // 配置Easy IP方式的NAT O...
  • 详解公网Ip和私网ip

    2020-02-10 09:14:45
    为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC; 原创 ...
  • 公网地址和私网地址问题

    千次阅读 2016-11-23 02:12:33
    服务器映射用于将内网服务器的私网地址映射为公网地址,供Internet用户访问。选择“静态映射”类型可以将每一台服务器映射成一个独立的公网IP地址。“服务器负载均衡”类型可以将多台服务器映射成同一个公网地址,...
  • 公网ip和私网ip

    2020-02-21 17:29:15
     IP可以分为Public IP Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP...
  • 私网IP 内网IP 局域网IP public ip address private ip address 什么是公网IP ? 公网IP是全球唯一的,只能分配给一台设备,是用来在公网直接使用的,比如ping baidu.com就能看到百度域名对应的公网IP,我们在阿里...
  • 私网和公网相关

    2019-03-04 14:31:41
    私网和公网 公网是指整个互联网,外部的终端都可以访问,路由器外面的世界。 私网可以看作是局域网,通过路由器连接内部的网络,这是一种内网。 内网也就是局域网,内网的计算机以NAT(网络地址转换)协议,通过一个...
  • SLB负载均衡可以为多台云服务器提供流量分发服务,阿里云的SLB负载均衡实例分为公网类型和私网类型两种,那么二者之间有什么区别?云吞铺子来说说: 公网SLB和私网SLB区别 费用对比:私网SLB负载均衡是免费的,公网...
  • SLB负载均衡可以为多台云服务器提供流量分发服务,阿里云的SLB负载均衡实例分为公网类型和私网类型两种,那么二者之间有什么区别?云吞铺子来说说: 公网SLB和私网SLB区别 费用对比:私网SLB负载均衡是免费的,公网...
  • IP可以分为Public IP Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP...
  • 公网IP是什么? 公网IP有什么作用? 如何查询自己的公网IP? 手机IP地址为什么是私网IP?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 844
精华内容 337
关键字:

公网和私网