导航:首页 > 编程语言 > pythontcprecv

pythontcprecv

发布时间:2022-09-04 12:04:12

python sock.recv最大能接收多少

不同操作系统不同,由TCP协议定,比如
linux 2.6.6 :/proc/sys/net/core/rmem_max:
4194304 //4M

查看/proc/sys/net/core/wmem_max:

8388608 //8M

所以,能设置的接收缓冲区的最大值是8M,发送缓冲区的最大值是16M。

Ⅱ Python TCP连接 服务器(Server)如何指定端口发送信息

一般来说服务器的端口需要是固定的,否则无法发起连接。客户端的端口可以是随机的。

Ⅲ python 2.7中有没有socketserver这个模块

Python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD Socket API;另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发。
本文简要介绍socket模块包含的类及其使用。
1.开始了解socket模块前,先熟悉下Python的网络编程模块主要支持的两种Intent协议:TCP和UDP。TCP协议是一种面向连接的可靠协议,用于建立机器之间的双向通信流。UDP协议是一种较低级别的、以数据包为基础的协议(无连接传输模式)。与TCP不同,UDP信息不可靠。
他们的区别如下图所示:左图为TCP连接协议,右图为UDP连接协议

2.socket模块的部分类方法介绍

类方法

说明

socket.socket(family, type[,proto])

创建并返回一个新的 socket对象

socket.getfqdn(name)

将使用点号分隔的 IP地址字符串转换成一个完整的域名

socket.gethostbyname(hostname)

将主机名解析为一个使用点号分隔的 IP地址字符串

socket.gethostbyname_ex(name)

它返回一个包含三个元素的元组,从左到右分别是给定地址的主要的主机名、同一IP地址的可选的主机名的一个列表、关于同一主机的同一接口的其它IP地址的一个列表(列表可能都是空的)。

socket.gethostbyaddr(address)

作用与gethostbyname_ex相同,只是你提供给它的参数是一个IP地址字符串

Socket.getservbyname(service,protocol)

它要求一个服务名(如'telnet'或'ftp')和一个协议(如'tcp'或'udp'),返回服务所使用的端口号

socket.fromfd(fd, family, type)

从现有的文件描述符创建一个 socket对象

3.socket对象的部分方法介绍

实例方法

说明

sock.bind( (adrs, port) )

将 socket绑定到一个地址和端口上

sock.accept()

返回一个客户机 socket(带有客户机端的地址信息)

sock.listen(backlog)

将 socket设置成监听模式,能够监听 backlog 外来的连接请求

sock.connect( (adrs, port) )

将 socket连接到定义的主机和端口上

sock.recv( buflen[, flags] )

从 socket中接收数据,最多 buflen 个字符

sock.recvfrom( buflen[, flags] )

从 socket中接收数据,最多 buflen 个字符,同时返回数据来源的远程主机和端口号

sock.send( data[, flags] )

通过 socket发送数据

sock.sendto( data[, flags], addr )

通过 socket发送数据

sock.close()

关闭 socket

sock.getsockopt( lvl, optname )

获得指定 socket 选项的值

sock.setsockopt( lvl, optname, val )

设置指定 socket选项的值

4.编写socket测试程序
(a)编写server的步骤

第一步是创建socket对象。调用socket构造函数。如:
socket = socket.socket( family, type )
family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:
socket.bind( address )
由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
第三步是使用socket套接字的listen方法接收连接请求。
socket.listen( backlog )
backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。
connection, address = socket.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
第 五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
传输结束,服务器调用socket的close方法关闭连接。
(b)编写client的步骤
首先创建一个socket以连接服务器:socket =socket.socket( family, type )
使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:
socket.connect( (host,port) )
host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
处理阶段,客户和服务器将通过send方法和recv方法通信。
传输结束,客户通过调用socket的close方法关闭连接。
5.实例源码:python socket半双工聊天
(a)tcpserver.py
[python] view plain
# -*- coding: cp936 -*-
#file:tcpserver.py

import socket
from time import ctime
import sys

bufsize = 1024
host = '127.0.0.1'
port = 8100
address = (host,port)

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sock.bind(address)
server_sock.listen(1)

while True:
print 'waiting for connection...'
clientsock,addr = server_sock.accept()
print 'received from :',addr

while True:
data = clientsock.recv(bufsize)
print ' 收到---->%s\n%s' %(ctime(),data)
data = raw_input("发送----->")
clientsock.send(data)
clientsock.close()

server_sock.close()
(b)tcpclient.py
[python] view plain
## -*- coding: cp936 -*-
##file:tcpclient.py

from socket import *
from time import ctime

bufsize = 1024
host = '127.0.0.1'
port = 8100
addr = (host,port)

client_sock = socket(AF_INET,SOCK_STREAM)
client_sock.connect(addr)

while True:
data = raw_input("发送---->")
if not data:
break
else:
client_sock.send(data)
data = client_sock.recv(bufsize)
print '收到---->%s\n%s' %(ctime(),data)

client_sock.close()

Ⅳ python 服务器,客户端编程同机运行连接问题

哪本书上的例子?不是所有人都有你看的书的,你最起码把书名说一下。
最好能贴出代码和错误信息。这样别人也可以给你看是什么原因的错误。

还有一个建议,也是别人给我的建议就是:问问题时也要好好组织语言,尽量清楚的描述你的问题,如果你用一句话提问,别人也可能只用一句话回答敷衍了事。如果你认真的写问题别人看明白了,也可能认真的给你回答。

Ⅳ python socketserver和socket的区别

区别:

1.首先介绍下socket

socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也
称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一 般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原 意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务

内部调用流程为:

启动服务端程序

执行 TCPServer.init方法,创建服务端Socket对象并绑定 IP 和 端口

执行 BaseServer.init方法,将自定义的继承自SocketServer.BaseRequestHandler 的类 - MyRequestHandle赋值给 self.RequestHandlerClass

执行 BaseServer.server_forever 方法,While 循环一直监听是否有客户端请求到达 ...
当客户端连接到达服务器

执行 ThreadingMixIn.process_request 方法,创建一个 “线程” 用来处理请求

执行 ThreadingMixIn.process_request_thread 方法

执行 BaseServer.finish_request 方法,执行 self.RequestHandlerClass() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用 MyRequestHandler的handle方法)

ForkingTCPServer

ForkingTCPServer和ThreadingTCPServer的使用和执行流程基本一致,只不过在内部分别为请求者建立 “线程” 和 “进程”。

Ⅵ python socket半双工聊天怎么运行

#coding=utf-8
importsocket#加载socket模块
fromtimeimportctime#加载time模块ctime类

HOST=''#设置主机IP,为空则表示本机上所有的网卡ip。
PORT=3300#设置端口号
BUSIZ=1024#设置数据缓冲区,1KB
ADDR=(HOST,PORT)

defcloseTCnt():#
TCntSock.close()
print"Sessionclosing.."

TSerSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建一个TCPsokcet
TSerSock.bind(ADDR)#绑定TCPsocket的地址和端口
TSerSock.listen(1)#只接收一个请求,如后续后其他请求则会被拒绝
try:
whileTrue:
print'Waittingforconnection...'
(TCntSock,cntAddr)=TSerSock.accept()#TSerSock.accept返回一个(conn,addr)的元组。conn是一个socket对象,而addr是客户端IP地址和端口
print'...connectionfrom:',cntAddr

try:

whileTrue:
rData=TCntSock.recv(BUSIZ)#接收客户端信息
ifnotrData:
continue
elifrData=='quit':#当收到‘quit’后关闭TCntSock并等待下一次链接
break
else:
print'From[%s]%s %s'%(cntAddr[0],ctime(),rData)


whileTrue:
sData=raw_input('I:>')
ifnotsData:
continue
else:
TCntSock.send('From[%s]%s %s'%
(cntAddr[0],ctime(),sData))#发送服务器信息。
break

exceptsocket.error,detail:#发生错误是关闭TCntSock,输出错误信息并等待下一次链接
printdetail
closeTCnt()

finally:
TSerSock.close()
#coding=utf-8
importsocket
HOST='localhost'#设置要链接的主机的IP
PORT=3300#设置要链接的主机端口号
BUFSIZ=1024#设置缓冲区大小,设定为1K
ADDR=(HOST,PORT)
tryCon=0

defTCnt():
tcpCliSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
whileTrue:
try:
tcpCliSock.connect(ADDR)#与服务端链接
except:
printu"正在尝试连接远程主机"
tryCon+=1
iftryCon==3:
printu"无法连接上远程主机,请稍后再试"
exit()
else:
break
printu'登陆成功(通讯结束请输入"quit"退出) '

try:
whileTrue:
data=raw_input('I:>')
ifnotdata:
continue
elifdata=='quit':#通知服务端工作完成
tcpCliSock.send(data)
break
else:
tcpCliSock.send(data)

whileTrue:
data=tcpCliSock.recv(BUFSIZ)

ifnotdata:
continue
else:
printdata
break
exceptsocket.error,e:
print"Sessionclosing"
printe
tcpCliSock.close()

if__name__=="__main__":
TCnt()

Ⅶ PYTHON UDP/TCP 服务器与客户端如何连接

你没有编程经验,一来就搞网络编程,你是天才吗?
先从编程的最基本概念开始学起吧。先买本《python基础教程》把前面基础的部分读懂了,上机实践。遇到错误信息了,自己去网络查找错误的原因。

至于你说的这几个函数,帮助手册上都有详细说明的。
变量A=5,不能直接通过网络传递,网络只能传二进制数据。你的变量需要串行化,比如变成字符串或者base64编码,才能传递,到了服务端要根据你事先定义好的协议去解析,才能重新得到这个变量。

Ⅷ 请问,我要用python语言实现socket编程,请问需要下载什么软件呢 急需啊~!!!!先谢谢了!

我从网上给你拷两个例子

服务器

#!/usr/bin/python
"USAGE:echoserver.py<port>"
,TCPServer
importsys,socket

classEchoHandler(BaseRequestHandler):
defhandle(self):
print"Clientconnected:",self.client_address
self.request.sendall(self.request.recv(2**16))
self.request.close()
iflen(sys.argv)!=2:
print__doc__
else:
TCPServer(('',int(sys.argv[1])),EchoHandler).serve_forever()

客户端

#!/usr/bin/python
"USAGE:echoclient.py<server><word><port>"
fromsocketimport*
importsys
iflen(sys.argv)!=4:
print__doc__
sys.exit(0)
sock=socket(AF_INET,SOCK_STREAM)
sock.connect((sys.argv[1],int(sys.argv[3])))
message=sys.argv[2]
messlen,received=sock.send(message),0
ifmesslen!=len(message):
print"Failedtosendcompletemessage"
print"Received:",
whilereceived<messlen:
data=sock.recv(32)
sys.stdout.write(data)
received+=len(data)
print
sock.close()

Ⅸ 在linux下,python怎么才能抓到网卡上的所有TCP数据包

Ethereal 自带许多协议的 decoder,简单,易用,基于winpcap的一个开源的软件.但是它的架构并不灵活,如何你要加入一个自己定义的的解码器,得去修改 Ethereal的代码,再重新编译,很烦琐.对于一般的明文 协议,没有什么问题,但是对于加密协议,比如网络游戏,客户端程序一般会在刚连接上的时候,发送一个随机密钥,而后的报文都会用这个密钥进行加密,如此. 要想破解,得要有一个可编程的抓包器.
libpcap是一个不错的选择,但是对于抓包这样需要反复进行”试 验->修改”这个过程的操作,c 语言显然不是明智的选择.
Python提供了几个libpcapbind。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用
一个规范的抓包过程
import pcap
import dpkt
pc=pcap.pcap() #注,参数可为网卡名,如eth0
pc.setfilter('tcp port 80') #设置监听过滤器
for ptime,pdata in pc: #ptime为收到时间,pdata为收到数据
print ptime,pdata #...
对抓到的以太网V2数据包(raw packet)进行解包
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if data.dport==80:
print p.data.data.data # by gashero
一些显示参数
nrecv,ndrop,nifdrop=pc.stats()
返回的元组中,第一个参数为接收到的数据包,(by gashero)第二个参数为被核心丢弃的数据包。

Ⅹ 如何利用Python嗅探数据包

一提到Python获取数据包的方式,相信很多Python爱好者会利用Linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:1.Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。2.dpkt协议分析并非必须,如果你对RFC791和RFC793等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。如果你平常习惯使用tcpmp抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpmp将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:tcpmpdst10.13.202.116andtcpdstport80-s0-ieth1-w../pcap/tcpmp.pcap-C1k-W5我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:sturctpcap_file_header{DWORDmagic;WORDversion_major;WORDversion_minor;DWORDthiszone;DWORDsigfigs;DWORDsnaplen;DWORDlinktype;}structpcap_pkthdr{structtimevalts;DWORDcaplen;DWORDlen;}structtimeval{DWORDGMTtime;DWORDmicroTime;}这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,这里有一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用。一个规范的抓包过程:importpcapimportdpktpc=pcap.pcap()#注,参数可为网卡名,如eth0pc.setfilter('tcpport80')#设置监听过滤器forptime,pdatainpc:#ptime为收到时间,pdata为收到数据printptime,pdata#对抓到的以太网V2数据包(rawpacket)进行解包:p=dpkt.ethernet.Ethernet(pdata)ifp.data.__class__.__name__=='IP':ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=='TCP':ifdata.dport==80:printp.data.data.data一些显示参数nrecv,ndrop,nifdrop=pc.stats()返回的元组中,第一个参数为接收到的数据包,第二个参数为被核心丢弃的数据包。至于对于如何监控tcpmp生成的pcap文件数据,大家可以通过pyinotify软件包来实现,如下:classPacker(pyinotify.ProcessEvent):def__init__(self,proct):self.proct=proctself.process=Nonedefprocess_IN_CREATE(self,event):logger.debug("createfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_MODIFY(self,event):self.process_IF_START_THREAD(event)logger.debug("modifyfile:%sinqueue"%self.process_IF_START_THREAD(event))defprocess_IN_DELETE(self,event):filename=os.path.join(event.path,event.name)logger.debug("deletefile:%s"%filename)defprocess_IF_START_THREAD(self,event):filename=os.path.join(event.path,event.name)iffilename!=self.process:self.process=filenameself.proct.put(filename)ifself.proct.qsize()>1:try:logger.debug("createconsumerproct.qsize:%s"%self.proct.qsize())consumer=Consumer(self.proct)consumer.start()exceptException,errmsg:logger.error("createconsumerfailed:%s"%errmsg)returnfilenameclassFactory(object):def__init__(self,proct):self.proct=proctself.manager=pyinotify.WatchManager()self.mask=pyinotify.IN_CREATE|pyinotify.IN_DELETE|pyinotify.IN_MODIFYdefwork(self):try:try:notifier=pyinotify.ThreadedNotifier(self.manager,Packer(self.proct))notifier.start()self.manager.add_watch("../pcap",self.mask,rec=True)notifier.join()exceptException,errmsg:logger.error("createnotifierfailed:%s"%errmsg)exceptKeyboardInterrupt,errmsg:logger.error("factoryhasbeenterminated:%s"%errmsg)在获得要分析的pcap文件数据之后,就要对其分析了,只要你足够了解pcap文件格式就可以了,对于我们来讲只需要获得TCP数据段的数据即可,如下:classWriter(threading.Thread):def__init__(self,proct,stack):threading.Thread.__init__(self)self.proct=proctself.stack=stackself.pcap_pkthdr={}defrun(self):whileTrue:filename=self.proct.get()try:f=open(filename,"rb")readlines=f.read()f.close()offset=24whilelen(readlines)>offset:self.pcap_pkthdr["len"]=readlines[offset+12:offset+16]try:length=struct.unpack("I",self.pcap_pkthdr["len"])[0]self.stack.put(readlines[offset+16:offset+16+length])offset+=length+16exceptException,errmsg:logger.error("unpackpcap_pkthdrfailed:%s"%errmsg)exceptIOError,errmsg:logger.error("openfilefailed:%s"%errmsg)在获得TCP数据段的数据包之后,问题就简单多了,根据大家的具体需求就可以进行相应的分析了,我这里是想分析其HTTP协议数据,同样也借助了dpkt软件包进行分析,如下:defworker(memcache,packet,local_address,remote_address):try:p=dpkt.ethernet.Ethernet(packet)ifp.data.__class__.__name__=="IP":srcip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.src)))dstip="%d.%d.%d.%d"%tuple(map(ord,list(p.data.dst)))ifp.data.data.__class__.__name__=="TCP":tcpacket=p.data.dataiftcpacket.dport==80anddstip==local_address:srcport=tcpacket.sportkey=srcip+":"+str(srcport)iftcpacket.data:ifnotmemcache.has_key(key):memcache[key]={}ifnotmemcache[key].has_key("response"):memcache[key]["response"]=Noneifmemcache[key].has_key("data"):memcache[key]["data"]+=tcpacket.dataelse:memcache[key]["data"]=tcpacket.dataelse:ifmemcache.has_key(key):memcache[key]["response"]=dpkt.http.Request(memcache[key]["data"])try:stackless.tasklet(connection)(memcache[key]["response"],local_address,remote_address)stackless.run()exceptException,errmsg:logger.error("connectremoteremote_addressfailed:%s",errmsg)logger.debug("oldheaders(nonecontent-length):%s",memcache[key]["response"])memcache.pop(key)exceptException,errmsg:logger.error("dpkt.ethernet.Ethernetfailedinworker:%s",errmsg)如果大家只是想单纯的获取IP地址、端口、流量信息,那么问题就更简单了,这里只是抛砖引玉。另外再提供一段代码供参考:importpcap,dpkt,structimportbinasciidefmain():a=pcap.pcap()a.setfilter('udpportrange4000-4050')try:fori,pdataina:p=dpkt.ethernet.Ethernet(pdata)src='%d.%d.%d.%d'%tuple(map(ord,list(p.data.src)))dst='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))sport=p.data.data.sportdport=p.data.data.dport =int(binascii.hexlify(p.data.data.data[7:11]),16)print' :%d,From:%s:%d,To:%s:%d'%( ,src,sport,dst,dport)exceptException,e:print'%s'%en=raw_input()if__name__=='__main__':main()

阅读全文

与pythontcprecv相关的资料

热点内容
vip影视tv版下载 浏览:349
pdf如何把文字去掉 浏览:591
秦昊的癌症的电影 浏览:294
电脑课上python装代码 浏览:486
可以看那种视频的在线网页 浏览:160
算式1256x56的简便算法 浏览:472
西安家电维修用什么app 浏览:245
服务器如何邀请好友进去 浏览:947
java栈队列区别 浏览:99
公共电影什么意思 浏览:347
港澳电影大胸美女古装剧 浏览:396
王牌战争怎么玩别的服务器 浏览:994
stata画散点图命令 浏览:123
伊波拉病毒全部女演员 浏览:873
华为20升级方舟编译器 浏览:370
android代码中设置图片 浏览:790
pdfmidi 浏览:870
云服务器实例规格有哪些 浏览:529
视觉原理pdf 浏览:923
文件夹应该保存在哪里 浏览:778