'Python使用socket獲取網絡地址'

Python 黑碼教主 2019-08-19
"
"
Python使用socket獲取網絡地址

獲取本機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
"

相關推薦

推薦中...