我们连接的WIFI,属性设置里有自动分配IP的选项。
我们通过控制台输入ipconfig,看到当前IP是10.214.18.178
那自动分配IP范围是多少?路由器对IP是怎么分配的。下面是我整理的code,有需要的可以直接Copy
IP范围获取:
1 private void RefreshButton_OnClick(object sender, RoutedEventArgs e) 2 { 3 var maxSubIp = GetMaxSubIp("10.214.18.1", "255.255.254.0"); 4 SubNetIpTextBlock.Text = $"10.214.18.1-{maxSubIp}"; 5 }
通过子网掩码及默认网关,获取路由可分配的最大IP:
我们将子网掩码转换为二进制数据,11111111111111111111111000000000,这里的1表示固定IP,0表示可分配的动态IP。
再将默认网关也转换为二进制数据,如00101000001101011010010010100000,将这个分成俩段:
“001010000011010110100100”,即上面子网掩码固定长度的部分,我们定义个名称A,分配的IP固定部分就是这部分A
“10100000”,是上面子网掩码动态长度的部分。IP动态段,最低的值就是这个。
所以我们要算出动态IP段的最高值即可。最高值就是二进制全部是1:“11111111”
然后改将二进制数据,转换为十进制的IP地址,就拿到我们动态IP的最大值了。
1 /// <summary> 2 /// 获取局域网下最大IP 3 /// </summary> 4 /// <param name="defaultGateway">默认网关</param> 5 /// <param name="subNetMask">子网掩码</param> 6 private string GetMaxSubIp(string defaultGateway, string subNetMask) 7 { 8 var subNetBinary = ConvertIpToBinary(subNetMask); 9 if (!subNetBinary.EndsWith("0")) 10 { 11 return string.Empty; 12 } 13 var existIndex = subNetBinary.IndexOf("0", StringComparison.Ordinal); 14 var gatewayBinary = ConvertIpToBinary(defaultGateway); 15 var maxIpLeft = gatewayBinary.Substring(0, existIndex); 16 17 //最大的子网IP 18 var maxSubIpBinary = maxIpLeft.PadRight(32, '1'); 19 var maxSubIp = ConvertBinaryToIp(maxSubIpBinary); 20 return maxSubIp; 21 }
IP与二进制间的转换:
1 /// <summary> 2 /// 将二进制数据转为IP 3 /// </summary> 4 /// <param name="ipBinaryData">IP二进制数据,如:00001010110101100001001000000001</param> 5 /// <returns>IP地址,如:10.214.18.1</returns> 6 private string ConvertBinaryToIp(string ipBinaryData) 7 { 8 var item1 = Convert.ToInt32(ipBinaryData.Substring(0, 8), 2); 9 var item2 = Convert.ToInt32(ipBinaryData.Substring(8, 8), 2); 10 var item3 = Convert.ToInt32(ipBinaryData.Substring(16, 8), 2); 11 var item4 = Convert.ToInt32(ipBinaryData.Substring(24, 8), 2); 12 return $"{item1}.{item2}.{item3}.{item4}"; 13 } 14 15 /// <summary> 16 /// 将IP转为二进制数据 17 /// </summary> 18 /// <param name="ipAddress">IP地址,如:10.214.18.1</param> 19 /// <returns>IP二进制数据,如:00001010110101100001001000000001</returns> 20 private string ConvertIpToBinary(string ipAddress) 21 { 22 var items = ipAddress.Split('.'); 23 var stringBuilder = new StringBuilder(); 24 foreach (var item in items) 25 { 26 var binary = Convert.ToString(int.Parse(item), 2); 27 var ipPieceBinary = binary.PadLeft(8, '0'); 28 stringBuilder.Append(ipPieceBinary); 29 } 30 return stringBuilder.ToString(); 31 }
所以在上面案例中,子网掩码255.255.254.0,默认网关10.214.18.1,这个网络的IP范围是:10.214.18.1-10.214.19.255
参考:
(25条消息) npm 获取某个网段下所有的子网_子网掩码与IP地址之间有什么关系?_weixin_39833429的博客-CSDN博客
C# 进制之间转换(二进制、十进制、十六进制) - 知乎 (zhihu.com)
作者:唐宋元明清2188 出处:http://www.cnblogs.com/kybs0/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。欢迎访问我的博客,同步更新:枫山别院源代码版本2.4.5-SNAPSHOT使用HikariConfig初始化HikariCP在《HikariCP源码分析之初始化分析一》中,我们解析了HikariCP的两种初始化方式,其中提到了使用HikariConfig的方式:HikariConfigconfig=newHikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("123"); //设置数据库独有的属性 config.addDataSourceProperty("cachePrepStmts","true"); //使用HikariConfig构造HikariDataSource HikariDataSourcedataSource=newHikariDataSource(config); //从连接池获取连接 C
1.新建项目然后填入项目名称和选择项目路径,填完点击完成。【这里可以直接选WebApplication,然后跳过第二步,截图时刚接触IDEA不熟悉=。=】2.添加WEB框架3.配置Tomcat在File-->Settings里面最后选择Tomcat解压的路径,点击ok就行了。最重要的就是要把网页配置在Tomcat下。点击AddCon.....这里要提一下,我看网上有人说不要点+,在Templates里选择,但是我最后一直报404错误,点击+号反而是好的。 改好Name,选好Tomcat版本,再点击Deploy....点击Atrifact后应该会自动把你的WEB项目给选中,最后如下面那种图那样基本就问题了。那个Tomcat的图标得是亮的,旁边得运行图标也得是亮的。我遇到的一些问题:1.8080端口被占用:我的打开了Tomcat的startup.bat了,关掉就好了。如果你们之前做过其他web的开发,也可能会被占用,如.net的iis也有可能占用8080。2.1099被占用:打开cmd,输入netstat-aon|findstr1099,找到PID后,在输入taskkill-f-pi
编辑配置文件vim/usr/local/nginx/conf.d/www.conf server{ listen80; server_name172.16.0.1; root/usr/local/nginx/html; location/{ autoindexon;#开启索引功能 autoindex_exact_sizeoff;#显示文件大小 autoindex_localtimeon;#显示文件时间 } }复制参数解释autoindex_exact_sizeoff; 默认为on,显示出文件的确切大小,单位是bytes。 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtimeon; 默认为off,显示的文件时间为GMT时间。 改为on后,显示的文件时间为文件的服务器时间复制把文件放在配置文件对应的目录root@linux:/#ls/usr/local/nginx/html/ redis-6.0.8.tar.gz复制重载配置文件/usr/local/nginx/sbin/nginx-sreload复制
Car.javapackagecom.gong.spring.beans; publicclassCar{ privateStringname; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } @Override publicStringtoString(){ return"Car[name="+name+"]"; } }复制Student.javapackagecom.gong.spring.beans; publicclassStudent{ privateStringname; privateintage; privatedoublescore; privateCarcar; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; }
在不同类型的操作系统中,批处理操作系统的缺点是:缺少交互性页式存储管理方案中,若一个进程的虚拟地址空间为2GB,页面大小为4KB,当用4字节标识物理页号时,页表需要占用多少个页面?一个进程的虚拟地址空间为2GB,页面大小为4KB,则共有2*1024*1024/4个页表项;每个页面用4个字节标识物理块号,则需要2*1024*1024/4*4大小的页表,由于每个页表为4KB,即2*1024*1024/4*4/(4*1024)=512个页面。假设某文件由100个逻辑记录组成,每个逻辑记录长度为80个字符。磁盘空间被划分为若干块,块大小为1024字符。在没有采用成组操作时,磁盘空间的利用率为多少?在没有成组操作时,每一个记录占用一个块,那么磁盘空间的利用率为80/1024=8%.假设某文件由100个逻辑记录组成,每个逻辑记录文件长度为80个字符。磁盘空间被划分为若干块,块大小为1024个字符。若才作用成组操作,块因子为12,那么磁盘空间的利用率为多少?若采用成组操作时,每12个记录占用一个块,那么磁盘空间的利用率为80*12/1024=94%。下列关于死锁与安全状态的描述中,呢个事正确的?死锁
在$HOME目录中管理python安装简介pythonbrew是受perlbrew和rvm启发,在用户的$HOME目录中进行python构建和安装自动化的项目。另一衍生版本:pythonz。安装建议使用如下语句下载安装pythonbrew:$curl-kLhttp://xrl.us/pythonbrewinstall|bashpythonbrew就会安装到~/.pythonbrew。然后在您的~/.bashrc文件追加下面这一行:[[-s$HOME/.pythonbrew/etc/bashrc]]&&source$HOME/.pythonbrew/etc/bashrc注:mac上没有.bashrc这一文件,用以下方法1.启动终端Terminal2.进入当前用户的home目录输入cd~3.创建.bash_profile输入touch.bash_profile4.编辑.bash_profile文件加入[[-s$HOME/.pythonbrew/etc/bashrc]]&&source$HOME/.pythonbrew/etc/bashrc5.保存文件,关闭.
摘要树的大部分问题都可以通过递归解决,即求一个树的某个值可以转化为求左子树/右子树的值二叉树的最大深度二叉树最大深度就是max(左子树的最大深度,右子树的最大深度)+1(根节点)publicintmaxDepth(TreeNoderoot){ if(root==null){ return0; } intleft=maxDepth(root.left); intright=maxDepth(root.right); returnleft<right?right+1:left+1; }复制验证二叉搜索树二叉搜索树是自左向右的有序树,可以通过中序遍历,然后判断中序遍历的结果是否有序publicbooleanisValidBST(TreeNoderoot){ if(root==null){ returntrue; } List<Integer>values=newArrayList<Integer>(); inOrder(root,values); for(inti=0;i<values.size()-1;i++){ if(values.get(i)>
今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/www.abc.com/index.php?m=content&c=content&a=init&menuid=822&catid=37&pc_hash=GsxXx8&page=2,很明显是多了一个www.abc.com,这个应该是配置文件中https没有设置,那我们就找找,通过关键词我们定位到文件是在/phpcms/libs/functions/global.func.php,大概在1591行$url=str_replace(array('http://','//','~'),array('~','/','http://'),$url);复制 将它改为$url=str_replace(array('https
数据结构合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下——老子1每日一练1.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2)在单链表将比正整数x小的数按递减次序排列;(3)将正整数(比)x大的偶数从单链表中删除。正确答案ps:||代表注释1.[题目分析]在由正整数序列组成的有序单链表中,数据递增有序,允许相等整数存在。确定比正整数x大的数有几个属于计数问题,相同数只计一次,要求记住前驱,前驱和后继值不同时移动前驱指针,进行计数。将比正整数x小的数按递减排序,属于单链表的逆置问题。比正整数x大的偶数从表中删除,属于单链表中结点的删除,必须记住其前驱,以使链表不断链。算法结束时,链表中结点的排列是:小于x的数按递减排列,接着是x(若有的话),最后是大于x的奇数。voidexam(LinkedListla,intx)∥la是递
乾明整理编译自Wired 量子位报道|公众号QbitAI如果你是被这个标题吸引进来的,一定要相信我,我不是一个标题党。因为这个机器人,真的是用脸来摘辣椒,不过是......水果椒。《Wired》杂志在网站上发表了一篇文章,介绍了这样的一个机器人。这个机器人是由以色列和欧洲的研究人员开发出来的,名为“Sweeper”。可以自动在温室里面“巡逻”,看辣椒是否熟了,然后把它们摘下来。放到篮子里。这个机器人长成这样:摘辣椒的时候是这样的: 来一段配音可能会更好:来,让我看看……别躲,让我看看…..好,你已经熟了,那就下来吧~ 想要理解这个机器人到底是怎么工作的,你可以把它想象成一个自动驾驶汽车,只不过……脸上有个锯子,还有一脸对辣椒的“渴望”。为了能够在温室里面行动,它身上配备有激光雷达传感器。在沿着植物“巡逻”的时候,每隔几英尺就会停下来拍摄它们。一旦它发现有类似于辣椒一样的东西,就会“凑过去”,然后从各个角度来“打量”这个辣椒。它也有照明设施,从而来更好地观察辣椒的形态。此外,这也代表着它能够夜以继日地工作。具体的工作细节是这样的:机器人关注的重点是颜色。当辣椒成熟的时候,颜色会发生不均匀
SRT(SecureReliableTransport)是新一代低延迟视频传输协议,是一种开源、免费和应用灵活的规范,它的性能与专用的协议一样优秀,同时能够在不同制造商生产的产品之间工作。本文主要参考Haivision的SRT白皮书,概述了SRT的一些关键特性,并将SRT与常见传输格式及新一代传输协议QUIC进行比较,最后简述SRT的发展现状。 关键特性直接建立连接SRT允许直接在信号源和目标之间建立连接,这与许多现有的视频传输系统形成了鲜明对比,这些系统需要一台集中式服务器从远程位置收集信号,并将其重定向到一个或多个目的地。基于中央服务器的体系结构有一个单点故障,在高通信量期间,这也可能成为瓶颈。通过集线器传输信号还增加了端到端信号传输时间,并可能使带宽成本加倍,因为需要实现两个链接:一个从源到中心集线器,另一个从中心到目的地。通过使用直接从源到目的地的连接,SRT可以减少延迟,消除中心瓶颈,并降低网络成本。 使用ARQ机制进行包投递比较三种包投递机制,顶部是一个未经纠正的数据流,每当包丢失时,输出信号就会产生错误。中间按照前向纠错(ForwardErrorCorrection,FE
本文长度为1283字,预估阅读时间3分钟。引言:本文回顾了Acrolinx的调查报告,并指出企业实现内容创建的方法。译者|Vanessa审校|Sarah编辑|雨欣内容创建是用户增长最重要的战略之一。在这你可以了解到其他企业创建内容的过程,以及从中可以获得的经验。内容的重要不仅在于它能促进用户增长、留存和参与,还在于它带来生意目标的转化。内容创建有多种的形式和玩法需要关注,这也是令它成为数字策略有效组成部分的原因。过去几年,关于内容营销方式及营销人如何用好内容营销的关注度不断增加。似乎创建内容的最佳方法和企业如何利用内容营销之间一直存在差距。Acrolinx进行了一项与全球250个内容专家合作的调查,来更好地了解企业在内容创建时遇到的挑战。这项调查为小品牌和大品牌如何进行内容创建方面提供了有用的洞察。以下是Acrolinx调查报告的回顾。内容创建的最高优先级项目 根据报告,内容专家最高优先级的项目包括:展现专业和权威提供商机 教育市场 与你的受众建立信赖关系 前四个目标显示内容创建者倾向于关注多个目标,包括关注度、思维引导、参与度和商机获取。因此,每个内容都有不同的目标,这是他们优先考
微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系1、Struts2框架概述(1)、什么是Struts2Struts2是一种基于MVC模式的轻量级web框架,本质上相当于一个servlet。在MVC设计模式中,Struts2作为控制器来建立模型与视图的数据交互,以WebWork为核心,采用拦截器机制来处理用户的请求,使得业务逻辑控制器能够与ServletAPI完全脱离,是致力于组件化和代码重用的J2EEWeb框架。(2)、Struts2优势与功能项目开源,使用及拓展方便。提供Exception处理机制。Result方式的页面导航,通过Result标签很方便的实现重定向和页面跳转。通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。提供简单、统一的表达式语言来访问所有可供访问的数据。提供标准、强大的验证框架和国际化框架。提供强大的、可以有效减少页面代码的标签。提供良好的Ajax支持。拥有简单的插件,只需放入相应的JAR包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型、自定义标签等,为struts2定制需要的
seajs遵循CMD规范,requirejs遵循AMD规范。AMD规范是预加载,CMD规范是赖加载。下文举例假设有文件b.js,c.js如下//b.js define(function(require,exports,module){ console.log('bisloaded') functionrun(){ console.log('brun'); } exports.run=run; }) //c.js define(function(require,exports,module){ console.log('cisloaded') functionrun(){ console.log('crun'); } exports.run=run; })复制1.seajs对依赖模块只加载不执行,requirejs对依赖模块既加载也执行运行代码://seajs <!DOCTYPEhtml> <html> <head> <title>seajs</ti
1线上数据测试模型1.1背景随着移动互联网的发展,移动app质量要求越来越高,传统行业质量的保证方式是测试人员在app开发过程中进行阶段性的测试,这种测试方式我们可以称之为主动测试,即测试人员主动对app进行测试。这种测试最典型的模型如下:图1传统测试测试质量的高低取决于用例输入的全面性,体现在产品上莫过于包含场景和数据。虽然测试人员借助于自身测试经验和一些测试理论(探索性测试、精准化测试等)已覆盖了产品绝大部分功能,但依然存在不够全面和不具有针对性等问题。某些功能测试人员是无法测试保证的,如视频播放器app播放失败,文件打开app打开文件失败等,测试人员构造的用例输入根本就没有办法完全覆盖有问题的视频和文件。移动端app发布一般经历功能测试,集成测试,内测和几轮的灰度测试,灰度测试阶段已经放到部分用户手上,最后完成发布,移动app面对的移动终端,场景环境都是千差万别,使用传统的构造输入用例方式无法测试充分。这里介绍一种利用线上数据提升移动app质量的测试模型,模型最核心的思想是利用埋点上报异常数据,提炼一种利用聚类分析、关联分析等数据分析模型抽取具有针对性和全面性的测试输入数据,通过
EFK架构说明日志收集方案是采用Elasticsearch、Fluentd、Filebeat和Kibana(EFK)技术栈。Fluented主要用来收集k8s组件和docker容器日志,Filebeat主要用来收集应用日志,主要因为目前项目中应用日志并未全部通过stdout方式输出到docker日志驱动中,导致flunted收集日志并不全面,需要通过Filebeat来将应用日志收集到es中,再由kibana来展示。Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。Elasticsearch通常与Kibana一起部署,Kibana是Elasticsearch的一个功能强大的数据可视化Dashboard,Kibana允许你通过web界面来浏览Elasticsearch日志数据。Fluentd是一个流行的开源数据收集器,我们将在Kubernetes集群节点上安装Fluentd,通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到Elasticsearch集群,在该集群中对其进行索
原文链接:https://blog.csdn.net/chenfengdejuanlian/article/details/53761004 使用WireShark抓包,选择TCP报文,TCP是一种安全的协议,在网络出现状况时也能安全稳定的传输数据,但是在网络出现问题时tcp报文中会有很多中情况导致报文重传或者是重组。现在就在报文中遇到的几个问题来详细说明一下。WireShark出现的常见提示TCPOut_of_Order的原因分析:一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元,因为他们可能是由不同的路径到达你的电脑上面。TCPRetransmission原因分析:很明显是上面的超时引发的数据重传。TCPdupackXXX#X原因分析:就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失。tcpprevioussegmentnotcaptured原因分析意思就是报文没有捕捉到,出现报文的丢失。下面就详细的报文进行分析: 1221:seq:8321,ack:18292,len:0,所有下一条报文的应该是seq:18292,ack:8
#include<iostream> #include<algorithm> #include<cstring> #include<vector> usingnamespacestd; constintN=10010; structnode{ ints,e,l; }ans[N]; boolcmp(node&a,node&b){ returna.s*b.l<b.s*a.l; } intf[N]; intmain(){ intT,cnt=1; cin>>T; while(T--){ cout<<"Case#"<<cnt++<<":"; intn,time=0; cin>>n; for(inti=1;i<=n;++i){ ints,e,l; cin>>s>>e>>l; ans[i]=node{s,e,l}; time+=s; } sort(ans+1,ans+n+1,cmp); fill(f,f+N,0); f[0
1、下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2)hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jediael。 若要下载最新的开发版本nutch,可以进行以下操作 svncohttps://svn.apache.org/repos/asf/nutch/branches/2.x复制 2、安装hadoop1.2.1集群环境 见http://blog.csdn.net/jediael_lu/article/details/38926477 3、安装hbase0.92.1集群环境 见http://blog.csdn.net/jediael_lu/article/details/43086641 4、Nutch的配置 (1)vi/usr/search/apache-nutch-2.3/conf/nutch-site.xml <property> <name>storage.data.store.class</name> <v