Python Socket介绍
介绍
Socket并不属于TCP/IP协议簇,它只是一个编程接口,即对TCP/IP的封装和应用,简单理解TCP/IP看看作一个函数,而Socket用来进行调用,Socket可在网络中对两个程序建立通信通道,Socket可分为两个基本模块,一个服务端一个客户端,链接后进行通信。
参数
了解参数前先简单了解下过程,即Socket服务端需要先实例化一个Socket类,然后循环监听客户端的连接,建立连接后,接受客户端发送来的数据,随后再向客户端返回数据,传输完毕后关闭连接。
而Socket客户端,也需要先实例化一个Socket类,然后连接服务端Socket的ip地址,连接后开始发送数据,传输完毕后关闭连接。
以上就是一个简单的过程,下面来看下Socket的一些参数,首先socket可接受三个参数,第一个是地址族,常用的有AF_INET(IPv4通信,为默认参数)、AF_INET6(IPv6通信)、AF_PACKET(链路层通信)、AF_LOCAL和AF_ROUTE(本地通信),第二个参数用来指明socket类型,常用的是SOCK_STREAM(TCP类型,为默认参数)、SOCK_DGRAM(UDP类型)、SOCK_RAW(原始数据类型),第三个是可选参数,用来指使用协议,一般不选系统会自动选择。
所以如果需要实例化一个TCP的socket,也就是默认参数可不写,即:
s=socket.socket() |
也就相当于
socket.socket(socket.AF_INET,socket.SOCK_STREAM) |
而UDP的socket类型即:
socket.socket(socket.AF_INET,socket.SOCK_DGRAM) |
函数
Socket服务端常见的一些函数如下:
bind:服务端使用,用来绑定socket的ip和端口,可以元组方式写入,示例如下。
s.bind((‘127.0.0.1’,1234)) |
listen:使用TCP模式时用来开启监听,可传入一个参数,用来指定允许连接的最大数量。
accept:使用TCP时此函数会返回两个值,一个是新的连接对象,一个是客户端的ip地址。
Socket客户端常见的一些函数如下:
connect:连接服务端函数,参数元组类型,需要传入socket服务端的ip和端口。
send:此函数用来发送数据,返回的值为已发送的字节数。
sendall:与send类似,区别在于send可能会发送不完全,而sendall会发送完整的TCP数据,成功返回none,失败将抛出异常。
recv:此函数用于接受数据,已字符串形式返回,可传入bufsize参数,用来指定最多可以接收的量。
sendto:此函数指使用UDP时发送数据。
recvfrom:此函数指使用UDP时接收数据。
close:关闭socket连接。
示例
以下为一个socket服务端的示例代码:
import socket
s = socket.socket() s = bind(('127.0.0.1',6666)) s.listen(3) while 1: conn,address = s.accept() print "a new connect from", address conn.sendall("Hello") conn.close() |
过程很简单,相关函数上面都已罗列说明,下面再看以下客户端的示例代码。
import socket
s = socket.socket() s.connect(("172.168.1.102", 6666)) data = s.recv(1024) s.close() print "Received:", repr(data) |
运行效果如下:
以上就是socket的简单使用,后续相关内容使用到后再详细说明。
网络攻防知识星球推荐,欢迎加入。
圈内会分享关于信息搜集、web渗透、内网安全、代码审计等东西,另外物联网安全也是趋势,我们平时的学习资料总结都会进行分享。
整体来说就是网络攻防这个大层面,或者说是网络安全,在这里我们创建一个纯净的技术交流平台,和密圈内的兄弟一块交流学习。