2017.07.07 Python网络编程之打印设备名称和IPv4地址

1.简单易懂直接上代码:

# -*- coding=gb2312 -*-#! /usr/bin/env python# Python Network Programming Cookbook --Chapter -1# This program is optimized for python 2.7. It may run on any# other Python version with/without modifications# -*- coding=gb2312 -*-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()

2.获取远程设备的IP地址:

# -*- coding: UTF-8 -*-# !/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 get_remote_machine_info():    remote_host = ‘www.hqu.edu.cn‘    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()

3.将IPv4地址转换为不同的格式:

# -*- coding: UTF-8 -*-# 如果要使用底层的网络函数,有时普通的字符串格式的IP地址并不是很有用,需要我们把它转换为打包后的32位二进制格式

# !/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 socketfrom binascii import hexlify

def convert_ipv4_address():    for ip_addr in [‘127.0.0.1‘,‘192.168.0.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)

if __name__==‘__main__‘:    convert_ipv4_address()

4.通过指定的端口和协议找到服务名:

# -*- coding: UTF-8 -*-# 如果想找到网络服务,最好知道服务运行在TCP或UDP协议的哪个端口上# !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 socketdef 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‘))

if __name__==‘__main__‘:    find_service_name()

5.主机字节序和网络字节之间相互转换:

# -*- coding: UTF-8 -*-# 编写底层网络应用时,或许需要处理通过电缆在两台设备之间传输的底层数据,需要把主机操作系统发出的数据转化为网络各式# !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 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))

if __name__==‘__main__‘:    convert_integer()

时间: 2024-10-06 02:23:08

2017.07.07 Python网络编程之打印设备名称和IPv4地址的相关文章

2017.07.09 Python网络编程之重用套接字地址

1.重用套接字地址: # -*- coding: UTF-8 -*-# 如果在某个端口上运行一个Python套接字服务器,连接一次后便终止了运行,就不能在使用这个端口了# !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 modifi

2017.07.12 Python网络编程之使用多路复用套接字I/O

1.在本章开始之前,需要先理解同步与异步,阻塞与非阻塞的区别: "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话

2017.07.16 Python网络编程之在套接字服务器中使用ThreadingMixIn

直接上代码,之后再解释: # -*- coding: UTF-8 -*-# 或许基于某些原因你不想编写基于进程的应用程序,而更愿意编写多线程应用程序# 和之前的基于ForkingMixIn的套接字服务器一样,使用ThreadingMixIn编写的套接字服务器要遵循相同的回显服务器编程模式# ThreadedServr继承自TCPServer和ThreadingMixIn,客户端连接这个多线程版服务器时,会创建一个新线程# !usr/bin/env python# Python Network P

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt

Python网络编程06----django数据库的增删改查

首先定义model如下. class UserInfo(models.Model): username=models.CharField(max_length=50,null=True,primary_key=False,db_index=True) #可以为空,不是主键,创建索引 password=models.CharField(max_length=50,error_messages={"invalid":"出错"}) #定义出错信息 gender=model

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

[Python网络编程] DNS缓存解决方案

记得以前写爬虫的时候为了防止dns多次查询,是直接修改/etc/hosts文件的,最近看到一个优美的解决方案,修改后记录如下: import socket _dnscache={} def _setDNSCache(): """ Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests. """ def _getaddrinfo(*args, **

[Python网络编程]gevent httpclient以及网页编码

之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,由于响应使用了C的解析,所以我一直想把这玩意用到项目中, 这两天一直在纠结这玩意,说实在一句话,比较难用,封装的不给力,最大缺陷如下: 1.不支持重定向,重定向需要自己来写,很费事 2.新建的httpclient对象只能发送同域名的请求 这相当的蛋疼,我花了一点时间封装了一下,解决了上面的两个问题,还增加了自动编解码问题,代码如下: #!/usr/

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不