Python 如何将send()函数应用于套接字对象?
编辑:我使用不推荐的Python 如何将send()函数应用于套接字对象?,python,sockets,Python,Sockets,编辑:我使用不推荐的apply()进行pickle漏洞攻击,用于安全竞赛apply似乎是使用pickle指令字符串调用方法的方式。不过,我很乐意知道更好的方法 我试图使用apply()在套接字上调用send()方法。\u socketobject,但收到一条奇怪的错误消息 In [130]: client Out[130]: <socket._socketobject at 0x108d0bfa0> In [131]: apply(socket._socketobject.send
apply()
进行pickle漏洞攻击,用于安全竞赛apply
似乎是使用pickle指令字符串调用方法的方式。不过,我很乐意知道更好的方法
我试图使用apply()
在套接字上调用send()
方法。\u socketobject
,但收到一条奇怪的错误消息
In [130]: client
Out[130]: <socket._socketobject at 0x108d0bfa0>
In [131]: apply(socket._socketobject.send, (client, "stuff"))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-131-3f9b1f1de824> in <module>()
----> 1 apply(socket._socketobject.send, (client, "stuff"))
TypeError: 'member_descriptor' object is not callable
这就是我最初获得名为client的套接字对象的方式:
In [107]: import signal
In [108]: sock = socket.socket()
In [109]: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
In [110]: sock.bind(('0.0.0.0', 1025))
In [111]: sock.listen(10)
In [112]: signal.signal(signal.SIGCHLD, signal.SIG_IGN)
Out[112]: 0
In [113]: client, addr = sock.accept()
感谢您的帮助
有趣的是,send()属于function类型
不对send
从其\uuu get\uuu()方法返回一个函数,因为它是一个函数。如果您想要得到要调用的实际函数,您将需要自己与描述符协议接口
>>> dir(socket._socketobject.send)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type(socket._socketobject.send)
<type 'member_descriptor'>
目录(socket.\u socketobject.send)
“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“,”集合“,”集合属性“,”大小属性“,”结构“,”子类钩子“]
>>>类型(socket.\u socketobject.send)
为什么要使用apply
?自Python2.3.1以来,它一直被弃用<代码>应用已(非常)不推荐使用。2.这不是应该如何使用的请参见上面的编辑。除了我不应该使用它,因为它已经被弃用了之外,它应该如何使用呢?非常感谢你澄清这一点,我将不得不对它进行更深入的研究
>>> dir(socket._socketobject.send)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type(socket._socketobject.send)
<type 'member_descriptor'>