第十一章:网络通信-socket:网络通信-寻址、协议簇和套接字类型-IP地址表示

11.2.1.4 IP地址表示
用C编写的网络程序使用数据类型struct sockaddr将IP地址白鸥说为二进制值(而不是python程序中常见的字符串地址)。要完成IPv4地址的Python和C表示之间的转换,可以使用inet_aton()和inet_ntoa()。

import binascii
import socket
import struct
import sys


for string_address in ['192.168.1.1','127.0.0.1']:
    packed = socket.inet_aton(string_address)
    print('Original:',string_address)
    print('Packed  :',binascii.hexlify(packed))
    print('Unpacked:',socket.inet_ntoa(packed))
    print()

数据包格式的4个字节可以被传递到C库,通过网络安全地传输,或者紧凑地保存在数据库中。
运行结果:
在这里插入图片描述
相关函数inet_pton()和inet_ntop()能处理IPv4和IPv6地址,根据传入的地址簇参数生成适当的格式。

import binascii
import socket
import struct
import sys

string_address = '2002:Ad10:10a:1234:21e:52ff:fe74:40e'
packed = socket.inet_pton(socket.AF_INET6,string_address)

print('Original:',string_address)
print('Packed  :',binascii.hexlify(packed))
print('Unpacked:',socket.inet_ntop(socket.AF_INET6,packed))

IPv6地址已经是十六进制值,所以将打包版本转换为一系列十六进制数位时会生成一个与原值类似的串。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值