Python3网络编程之socket模块其它方法学习

获取本机的主机名

socket.gethostname()

hostname = socket.gethostname()
print('hostname:', hostname, 'type:', hostname.__class__)
# hostname: hardy_sap type: <class 'str'>

获取指定主机的IP

socket.gethostbyname()

ip = socket.gethostbyname('www.baidu.com')
print('IP:', ip, 'type:', ip.__class__)
# IP: 183.232.231.172 type: <class 'str'>

socket.gethostbyname_ex()
gethostbyname的扩展版,返回一个包含三元素的元组,·
分别是:
[0]: 给定主机名的主要的主机名
[1]: 一个主机名的别名列表
[2]: 同一台主机同一个接口的其他IP地址的列表

ip_tp = socket.gethostbyname_ex('www.baidu.com')
print(ip_tp)
# ('www.a.shifen.com', ['www.baidu.com'], ['183.232.231.172', '183.232.231.174'])

获取指定主机的地址信息

socket.getaddrinfo()

addrinfo = socket.getaddrinfo('www.baidu.com', 80)
print('addrinfo:', addrinfo)
# addrinfo: [(<AddressFamily.AF_INET: 2>, 0, 0, '', ('183.232.231.172', 80)), (<AddressFamily.AF_INET: 2>, 0, 0, '', ('183.232.231.174', 80))]

获取服务使用的端口

socket.getservbyname()

port = socket.getservbyname('ftp', 'tcp')
print('ftp:', port)
# ftp: 21

获取端口对应的服务名

socket.getservbyport()

service = socket.getservbyport(21, 'tcp')
print(21, service)
# 21 ftp

字符IP转换成字节

socket.inet_aton()

bys = socket.inet_aton('127.0.0.1')
print(bys)
# b'\x7f\x00\x00\x01'

IP字节转换成字符IP

socket.inet_ntoa()

ip = socket.inet_ntoa(bys)
print(ip)
# 127.0.0.1

getsockname与getpeername

getsockname(),获取本机地址
getpeername(),获取对端地址

sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sk.connect(('www.baidu.com', 80))
print('本机地址sockname:', sk.getsockname())  # ('192.168.1.103', 58895)
print('对端地址peername:', sk.getpeername())  # ('183.232.231.172', 80)

整体代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""socket模块其它方法学习

socket.gethostname()
socket.gethostbyname()
socket.gethostbyname_ex()
socket.getaddrinfo()
socket.getservbyname()
socket.getservbyport()
socket.inet_aton()
socket.inet_ntoa()
sk.getpeername()
sk.getsockname()
"""

import socket

# 获取本机的主机名
hostname = socket.gethostname()
print('hostname:', hostname, 'type:', hostname.__class__)

# 获取指定主机的IP
ip = socket.gethostbyname('www.baidu.com')
print('IP:', ip, 'type:', ip.__class__)

# gethostbyname的扩展版
# 返回一个包含三元素的元组,
# 分别是:
# [0]: 给定主机名的主要的主机名
# [1]: 一个主机名的别名列表
# [2]: 同一台主机同一个接口的其他IP地址的列表
ip_tp = socket.gethostbyname_ex('www.baidu.com')
print(ip_tp)

# 获取指定主机的地址信息
addrinfo = socket.getaddrinfo('www.baidu.com', 80)
print('addrinfo:', addrinfo)

# 获取服务使用的端口
port = socket.getservbyname('ftp', 'tcp')
print('ftp:', port)

# 获取端口对应的服务名
service = socket.getservbyport(21, 'tcp')
print(21, service)

# 字符IP转换成字节
bys = socket.inet_aton('127.0.0.1')
print(bys)

# IP字节转换成字符IP
ip = socket.inet_ntoa(bys)
print(ip)

# getsockname与getpeername
sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
sk.connect(('www.baidu.com', 80))
print('本机地址sockname:', sk.getsockname())  # ('192.168.1.103', 58895)
print('对端地址peername:', sk.getpeername())  # ('183.232.231.172', 80)


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值