话不多说,直接进入正题,如果有概念理解不清楚的话,可以去看文章后面的部分,我直接在前面给出计算方法。
在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。
给出一个例子:
十进制:172.16.25.3
二进制:10101100.00010000.00011001.00000011
这就是一个简单的十进制数转二进制数,我这里给出一种比较简单的计算方法。
因为我们一个IP地址由四个八位组组成,一个八位组对应八位二进制数,而二进制又是可以由2的次幂推出,所以计算方法如下:

当然我们由二进制转十进制,只需把为1的哪些位置给加起来即可。
我们知道,子网掩码和ip地址一样,都是由八位四元组组成:
IP地址:10.0.10.63
子网掩码:255.255.255.224
先把子网掩码转换为二进制:
十进制:255.255.255.224
二进制:11111111.11111111.11111111.11100000
子网掩码中前面1的个数,为IP地址网络号的位数!!
子网掩码中有27个1 ,所以网络号也应该为IP地址的前27位,后面的32 - 27 = 5位为主机地址。
IP地址: 00001010.00000000.00001010.001|11111 #前27位的网络号位,后面为主机号位
子网掩码:11111111.11111111.11111111.111|00000
有时候可能不给出具体的子网掩码,而是给出数字27,数字27就是指网络号的位数是27位,通过27也可以算出子网掩码为:
11111111.11111111.11111111.11100000
因为27就是指子网掩码前27位都为1,后面为0.
注意,我们这里只是算出网络号和主机号的位置,而不是说IP地址的前27位就是网络地址。
以上面的例子为例:
IP地址: 00001010.00000000.00001010.001|11111 #前27位的网络号位,后面为主机号位
子网掩码:11111111.11111111.11111111.111|00000
我们在IP地址中把后面5位的主机地址变为0 ,得到网络号(即网络地址):
网络地址:00001010.00000000.00001010.001|00000
再转为十进制即可:
网络地址:10.0.10.32
对位与运算就是同时为1时为1,其他情况均为0.
举个例子:
IP地址: 00001010.00000000.00001010.00111111
子网掩码:11111111.11111111.11111111.11100000
进行对位与运算,将IP地址和子网掩码的对应位进行与运算,得到:
网络号:00001010.00000000.00001010.00100000
将二进制转换为10进制即可。
其实我们不必计算全部八位组的二进制,比如:
IP地址:10.0.10.63
子网掩码:255.255.255.224
我们知道255的所有八位二进制都是为1的,1和1与运算是1,1和0进行与运算是0 ,所以255和任何数进行与运算都等于那个数本身,即和255对位的数,进行与运算之后,肯定不会变,所以就不用计算该部分的二进制了。
而0和1进行与运算是0,0和0进行与运算是0 ,所以0和任何数字进行与运算都是0,即和0对位的数,进行与运算之后,肯定是0,也不用计算二进制。例如,以上可以写为:
IP地址:10.0.10.00111111
子网掩码:255.255.255.11100000
我们只需计算最后一个八位组即可。
172.20 .96 .68 255.255.192.0
255对应的部分保持不变,0对应的部分为0
得172.20.?.0
子网掩码中非255或0的部分只剩192
用256减非零部分,即256-192=64
?部分是一个64的整数倍的数,且最接近96的整数
?=64 172.20.64.0
例: 192.168.108.90 255.255.224.0 求网络号
192.168.?.0 256-224=32
?部分是一个32的整数倍的数,且最接近108的整数
192.168.96.0
IP地址:10.0.10.63
子网掩码:255.255.255.224
因为我们已知网络号前三位肯定是10.0.10,所以只需计算最后一位即可。
1、先用256减去子网掩码最后一位:
256 - 224 = 32
2、口算出:不大于IP地址最后一位63,但是是32的倍数的数
这个数即为32
3、那么网络号最后一位就是32,网络号为:10.0.10.32
补充:256 - 224 = 32,如果63是32的倍数的话,则这个IP地址直接为网络号(网络地址);如果63是32的倍数减1,那么该IP地址为广播地址;否则前面两个都不是的话,该IP地址就是主机地址。
前面说过,IP地址主机号部分全为0的话,就是网络地址,那么主机号部分全为1的话,就是广播地址。
IP地址:10.0.10.63
子网掩码:255.255.255.224
IP地址: 00001010.00000000.00001010.001|11111 #前27位的网络号位,后面为主机号位
子网掩码:11111111.11111111.11111111.111|00000
我们可以发现,该IP地址主机号以及全部为1了,所以不用计算,该IP地址就是一个广播地址。63也是256 - 224 = 32的倍数减1。正好符合我们上面的定理。
1、如果两台主机的网络号相同,我们就说它们是同一网段
2、主机号的意义
3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2是减去网络号和主机号,因为同一网段中网络号和主机号是相同的,即唯一的。
例:192.168.108.90 255.255.224.0 求该网段的广播地址
法1:192.168.011 01100.01011010
255.255.111 00000.00000000 AND
--------------------------------------------
主机号部分
192.168.011 00000.00000000
将主机号部分全写成1,得
主机号部分
192.168.011 11111.11111111
192.168.127 .255
考试时,如要写出计算过程,用法1
法2:192.168.108.90 255.255.224.0
口算出网络号 192.168.96.0
下一网段的网络号为 192.168.128.0
下一网段网络号减1即为本网段的广播地址,即192.168.127.255
202. IP 地址10.0.10.63 和掩码255.255.255.224 代表的是一个______。
A. 主机地址 B. 网络地址
C. 广播地址 D. 以上都不对
解法1: 10 .0 .10 .63 (001 11111)
255.255.255.224 (111 00000)
主机号
由此见主机号部分全为1,因此它是一个广播地址
解法2: 256-224=32 63是一个32的倍数减1的数
193. 要设置一个子网掩码使192.168.0.94 和192.168.0.116 不在同一网段,使用的子网掩码可能是______。
(选择一项或多项)
A. 255.255.255.192 B. 255.255.255.224
C. 255.255.255.240 D. 255.255.255.248
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:
我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status
我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!
我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby
对于我的大部分应用程序,我从Geocoder获取城镇/城市的纬度、经度、邮政编码等。我只是投入城市和州,作为返回,我得到了我处于一个有field的场景中。该场所需要一个地址,我正在从另一个来源获取该场所的纬度和经度。使用Geocodergem,我可以通过给地址提供经纬度来获取地址吗? 最佳答案 在Rails控制台中运行。latitude=40.0397longitude=-76.30144geo_localization="#{latitude},#{longitude}"query=Geocoder.search(geo_loca
当我运行服务器并转到localhost:3000时,我收到此错误:ActiveRecord::ConnectionNotEstablishedNoconnectionpoolwithidprimaryfound.有问题的代码:activerecord(5.0.0)lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in`retrieve_connection' 最佳答案 我会发表评论,但我缺乏声誉。反正这个错误有时候是sqlite版本导致的。我建
我正在尝试使用以下方法更新rubygems:gemupdate--system但是我得到了错误:ERROR:Whileexecutinggem...(Gem::RemoteFetcher::UnknownHostError)nosuchname(https://rubygems.org/specs.4.8.gz). 最佳答案 不确定您安装的是哪个版本的rubygems,但是可以通过三种方式修复:网络问题-稍后重试。您的版本已变砖无法更新,您需要以其他方式安装NOTE:RubyGems1.1and1.2haveproblems
Nginx在生产中的重要性通常基于它为慢速客户端提供服务的能力;在RESTfulAPI的设置中,它似乎是生产堆栈的一个不必要的层,尤其是Puma(不像广泛使用的unicorn可以处理nginx工作)。Pumacanallowmultipleslowclientstoconnectwithoutrequiringaworkertobeblockedontherequesttransaction.Becauseofthis,Pumahandlesslowclientsgracefully.HerokurecommendsPumaforuseinscenarioswhereyouexpect