如果想找到网络服务,最好知道该服务运行在TCP或UDP协议的哪个端口上。 1.5.1 准备工作 如果知道网络服务使用的端口,可以调用socket库中的getservbyport()函数来获取服务的名字。调用这个函数时可以根据情况决定是否提供协议名。 1.5.2 实战演练 我们来定义find_service_name()函数,在Python的for-in循环中调用函数getservbyport(),解析几个端口,例如80和25。 代码清单1-4展示了如何定义find_service_name()函数,如下所示: #!/usr/bin/env python # Python Network Programming Cookbook -- Chapter - 1 # This program is optimized for Python 2.7. # It may run on any other version with/without modifications. import socket def find_service_name(): protocolname = 'tcp' for port in [80, 25]: print "Port: %s => service name: %s" %(port, socket.getservbyport(port, protocolname)) print "Port: %s => service name: %s" %(53, socket.getservbyport(53, 'udp')) if __name__ == '__main__': find_service_name() 运行这个脚本,会看到如下输出: $ python 1_4_finding_service_name.py Port: 80 => service name: http Port: 25 => service name: smtp Port: 53 => service name: domain 1.5.3 原理分析 在这个攻略中,使用for-in语句遍历一组变量。在每次遍历中,获取端口对应的服务名。
Python网络编程攻略——1.5 通过指定的端口和协议找到服务名
书名: Python网络编程攻略
作者: 萨卡尔
出版社: 人民邮电出版社
译者: 安道
出版年: 2014-12-1
页数: 170
定价: 45.00元
装帧: 平装
丛书: 图灵程序设计丛书
ISBN: 9787115372697