获取本机HOST name和局域网IP
import socket def print_machine_info(): host_name = socket.gethostname() ip_address = socket.gethostbyname(host_name) print("Host name is:%s" % host_name) print("IP address is:%s" % ip_address) if __name__ == '__main__': print_machine_info()
输出
Host name is:jomax-mbp.lan IP address is:192.168.1.15
获取远程设备的IP地址
# -*- coding: UTF-8 -*- import socket def get_remote_machine_info(err_msg=None): remote_host = 'www.baidu.com' try: print("主机的IP地址是:%s" % socket.gethostbyname(remote_host)) except (socket.error, err_msg): print("%s: %s" % (remote_host, err_msg)) if __name__ == '__main__': get_remote_machine_info()
将IPv4地址转换为不同的格式
def convert_ipv4_address(): for ip_addr in ['127.0.0.1', '192.168.1.1']: packed_ip_addr = socket.inet_aton(ip_addr) unpacked_ip_addr = socket.inet_ntoa(packed_ip_addr) print("IP 地址: %s => 打包后:%s ,没有打包前:%s" % (ip_addr, hexlify(packed_ip_addr), unpacked_ip_addr))
输出
IP 地址: 127.0.0.1 => 打包后:b'7f000001' ,没有打包前:127.0.0.1 IP 地址: 192.168.1.1 => 打包后:b'c0a80101' ,没有打包前:192.168.1.1
通过指定的端口和协议找到服务名:
def find_service_name(): protocolname = 'tcp' for port in [80, 25]: print("端口:%s => 服务名称是:%s " % (port, socket.getservbyport(port, protocolname))) print("端口:%s => 服务名称是:%s" % (53, socket.getservbyport(53, 'udp')))
输出
端口:80 => 服务名称是:http 端口:25 => 服务名称是:smtp 端口:53 => 服务名称是:domain
主机字节序和网络字节之间相互转换
def convert_integer(): data = 1234 print("源字节:%s => Long host byte order:%s,Network byte order:%s" % (data, socket.ntohl(data), socket.htonl(data))) print("源字节: %s => Short host byte order:%s,Network byte order:%s" % (data, socket.ntohs(data), socket.htons(data)))
输出
源字节:1234 => Long host byte order:3523477504,Network byte order:3523477504 源字节: 1234 => Short host byte order:53764,Network byte order:53764