python模块:socket模块

1.Socket类型

socket(family,type[,protocal])     使用给定的地址族,套接字类型,协议编号(默认是0)来创建套接字

socket类型    描述
socket.AF_UNIX
只能够用于单一的Unix系统进程间通信

socket.AF_INET 服务器之间网络通信
socket.AF_INET6
IPv6

socket.SOCK_STREAM 流式socket , for TCP
socket.SOCK_DGRAM 数据报式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头.
socket.SOCK_SEQPACKET 可靠的连续数据包服务
创建TCP Socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP Socket s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.Socket函数

socket函数(服务器) 描述
s.bind(address) 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
s.listen(backlog)
开始监听TCP传入连接.backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量.该值至少为1,大部分应用程序设为5就可以了.

s.accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据.address是连接客户端的地址.
socket函数(客户端)
s.connect(address) 连接到address处的套接字.一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误.
s.connect_ex(adddress)
功能与connect(address)相同,但是成功返回0,失败返回errno的值.


公共socket函数

s.recv(bufsize[,flag])
接受TCP套接字的数据.数据以字符串形式返回,bufsize指定要接收的最大数据量.flag提供有关消息的其他信息,通常可以忽略.

s.send(string[,flag])
发送TCP数据.将string中的数据发送到连接的套接字.返回值是要发送的字节数量,该数量可能小于string的字节大小.

s.sendall(string[,flag])
完整发送TCP数据.将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据.成功返回None,失败则抛出异常.

s.close() 关闭套接字.
s.gettimeout()
返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None.

s.fileno() 返回套接字的文件描述符.
s.makefile()
创建一个与该套接字相关连的文件

3.socket原理

TCP服务端:

1.创建套接字,绑定套接字到本地IP与端口(socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind())

2.开始监听连接(s.listen())

3.进入循环,不断接受客户端的连接请求(s.accept())

4.然后接收传来的数据,并发送给对方数据(s.recv() , s.sendall())

5.传输完毕后,关闭套接字(s.close())

TCP客户端:

1.创建套接字,连接远端地址(socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect())

2.连接后发送数据和接收数据(s.sendall(), s.recv())

3.传输完毕后,关闭套接字(s.close())

4.例1:

服务端:

[[email protected] python]# vim socket12.py
#!/bin/env python
#!-*- coding:UTF-8 -*-
import socket

s=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))

s.listen(5)
while True:
    c,addr=s.accept()
    print "Got connection from,addr"
    c.send("Thank you for connection")
    c.close()
[[email protected] python]# chmod  755 socket12.py  
[[email protected] python]# ./socket12.py

[[email protected] python]# netstat -antulp | grep 1234
tcp        0      0   0.0.0.0:1234           0.0.0.0:*                   LISTEN      31580/python

客户端:

[[email protected] ~]# vim socket12.py

#!/bin/env python
#!-*- coding:UTF-8 -*-
import socket

s=socket.socket()
host=‘0.0.0.0‘            --服务端的IP地址
port=1234

s.connect((host,port))
print s.recv(1024)

[[email protected] ~]# chmod  755 socket12.py
[[email protected] ~]# ./socket12.py
Thank you for connection
[[email protected] ~]#

此时服务端就会有数据:

时间: 2024-11-06 23:58:59

python模块:socket模块的相关文章

python之socket模块

UDP client #!/usr/bin/env python2.7 #-*-coding:utf-8 -*- import socket s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto("hello",("localhost",8001)) data,addr = s.recvfrom(1024) print "receive data:%s from %s" % (dat

python基础===socket模块的讲解(转)

一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听.两端使用各自的socket来发送和 接收信息. 在使用的时候,每个socket都被绑定到一个特定的IP地址和端口.IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36,76):端口数值的取

Python的socket模块详解

一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听.两端使用各自的socket来发送和 接收信息. 在使用的时候,每个socket都被绑定到一个特定的IP地址和端口.IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36,76):端口数值的取

python中socket模块

一.初识socket      socket 是网络连接端点,每个socket都被绑定到一个特定的IP地址和端口.IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36,76):端口数值的取值范围是0~65535.端口数小于1024的都是为众所周知的网络服务所保留的 (例如Web服务使用的80端口):最大的保留数被存储在socket模块的IPPORT_RESERVED变量中.你也可以为你的程序使用另外的端口数 值. 不是所有的IP地址都对世界的其它地方可

python之socket模块详解--小白博客

主要是创建一个服务端,在创建服务端的时候,主要步骤如下:创建socket对象socket——>绑定IP地址和端口bind——>监听listen——>得到请求accept——>接收请求recv——>发送信息send——>关闭close客户端代码就是连接服务器,接收和发送消息,具体流程如下:创建socket对象socket——>connet连接服务器——>获取消息recv——>发送消息send——关闭close 1.服务端代码 #服务器端 import s

使用 Python 的 Socket 模块构建一个 UDP 扫描工具

译文:oschina 英文:bt3gl 当涉及到对一些目标网络的侦察时,出发点无疑是首先发现宿主主机.这个任务还可能包含嗅探和解析网络中数据包的能力. 几周前,我曾经谈到了如何使用Wireshark来进行数据包嗅探,但如果你没有wireshark,你如何去监控网络流量呢? 这一次,Python提供了几种解决方案,今天我将一步步演示如何建立一个UDP主机发现工具.首先,我们要看我们如何处理原始套接字来编写一个简单的嗅探器,它能够查看和解析网络数据包.然后,我们将在子网内多线程运行该进程,结果将在我

Python学习——socket 模块

http://www.cnblogs.com/alex3714/articles/5830365.html 可以看的内容 socket sever #! /usr/bin/env python # -*- coding:utf-8 -*- # Author Ian Ying # mail: [email protected] import socket import os server = socket.socket() server.bind(('localhost', 6969)) #绑定被

Python 使用Socket模块编写一个简单的服务器和客户端

任务 Socket套接字开始监听后,使用accept函数来等待客户连接.这个过程在循环中无限循环,服务器处理完和客户端的连接后会再次调用accpet函数,等待下一个连接. 客户端代码 1 import socket 2 s1=socket.socket() 3 s1.bind(("127.0.0.1",2345)) 4 s1.listen(5) 5 while 1: 6 conn,address = s1.accept() 7 print("a new connect fro

老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全性测试,但是条件限制你无法用商业工具,所以自己动手要写测试工具,在这里我们在测试开发工程师的就业培训中构建了一个场景,就是自己开发udp扫描工具,我们在现阶段主要是用python为主要开发语言来实现各种场景下的测试,而quicktestprofessional的培训我们已经免费. 首先我们了解下概念:套接字能够访问底层网络信息.如,我们可以用它来检查IP和ICMP报头,他们