python将IP地址转换成长整形的方法

我们经常访问网站是通过网址导航,网址导航链接的是域名,域名通过DNS转换成IP地址进行访问。我们见到IP地址通常是这样表示的a.b.c.d的形式。例如,山西农业大学首页的IP地址是211.82.8.2。其实IP地址还可以用一个长整形数来表示,它与IP地址的对应关系是:
ip=((a*256+b)*256+c)*256+d
所以,山西农业大学的首页可以通过heep://211.82.8.2访问,也可以通过http://3545368578来访问。因为python的整形可以表示很大,所以不用L作为后缀。
下来我们通过浏览器访问:在浏览器的地址栏中输入http://3545368578,浏览器会自动转换为211.82.8.2并访问该网站。
关键部分到了,我们将普通的点分IP地址转换成整形表示。

点击(此处)折叠或打开

    print "IP address convert to long inteer"
    ip = raw_input("please input your ip address like a.b.c.d:") #输入想要转换的IP地址
    num = ip.split(".")    #把IP地址进行切分
    longa = int(num[0])
    longb = int(num[1])
    longc = int(num[2])
    longd = int(num[3])

    LIP = int(((longa*256+longb)*256+longc)*256+longd)
    print 'The long integer ip address is : http://%d' % LIP    #通过复制该地址可以直接访问相应的网站

我们输入山西农业大学的IP测试:

点击(此处)折叠或打开

    IP address convert to long inteer
    please input your ip address like a.b.c.d:211.82.8.2
    The long integer ip address is : http://3545368578

好了我们访问一下:
地址栏中输入我们的长整形数

回车访问,地址变了:

python整数与IP地址转换 [转]

我们有时会将一个整数与IP地址进行互换,用python代码实现很简单
将一个整数如2000000,变为一个IP地址的方式
>>> import socket
>>> import struct
>>> int_ip = 123456789
>>> ip = socket.inet_ntoa(struct.pack('I',socket.htonl(int_ip)))      #int to ip address
'7.91.205.21'
>>> socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])     #ip address to int
123456789L

其实这是进制数的转换,我们可以自己写代码
# 整数to IP地址格式 成都网站建设
>>> def ch1(num):
             s = []
             for i in range(4):
                  s.append(str(num %256))
                  num /= 256
        return '.'.join(s[::-1])
>>> ch1(123456789)
'7.91.205.21'

用lambda的方式,整数toIP 地址 一行代码搞定
>>> ch2 = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
>>> ch2(123456789)
'7.91.205.21'

用lambda的方式,IP地址转换到整数
>>> ch3 = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])
>>> ch3('7.91.205.21')
123456789
分类: Python

该项目仅供大家娱乐以下,感兴趣可以试一试……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值