在我的脚本中获取“TypeError:需要整数”
Posted
技术标签:
【中文标题】在我的脚本中获取“TypeError:需要整数”【英文标题】:Getting a "TypeError: an integer is required" in my script 【发布时间】:2014-05-10 22:19:35 【问题描述】:出于教育原因,我正在尝试使用 Python 制作僵尸网络,但我不断收到以下错误:
TypeError:需要一个整数
这是我的脚本:
import os
import socket
import random
import string
# string.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
a = random.choice(string.letters)
b = random.choice(string.letters)
c = random.choice(string.letters)
d = random.choice(string.letters)
e = random.choice(string.letters)
name = 'bot' + a + b + c + d + e
network = 'chat.freenode.net'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ('NICK', name + '\r\n')
irc.send ( 'USER', name, name, name, ':Python IRC\r\n' )
irc.send ( 'JOIN #occult_hand\r\n' )
irc.send ( 'PRIVMSG #occult_hand :Hello World.\r\n' )
while True:
data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
if data.find ( '!shutdown' ) != -1:
irc.send ( "PRIVMSG #occult_hand :Fine, if you don't want me\r\n" )
irc.send ( 'QUIT\r\n' )
if data.find ( '!list' ) != -1:
irc.send ( 'PRIVMSG #occult_hand :' + name, 'ONLINE\r\n' )
if data.find ( '!ddos' ) != -1:
irc.send ( 'PRIVMSG #occult_hand :Enter a target\r\n' )
if data.find ( 'KICK' ) != -1:
irc.send ( 'JOIN #occult_hand\r\n' )
if data.find ('cheese') != -1:
irc.send ( 'PRIVMSG #occult_hand :WHERE!!!!!!\r\n' )
print data
【问题讨论】:
请格式化您的代码并发布完整的回溯 哪一行报错? 【参考方案1】:第 21 行的脚本错误,irc.send('NICK', name + '\r\n')
:
这是因为socket.send
方法具有以下签名,根据docs:
socket.send(string[, flags])
string
参数是要发送的数据。 flags
参数是可选标志,与 Unix man 2 recv
中描述的相同。详情请见http://man7.org/linux/man-pages/man2/recv.2.html。
基本上,flags
参数是一个整数值,默认为0
。如 Unix 手册页所述,标志值在 socket
模块中作为常量提供,您可以通过使用 OR 逻辑运算组合所需的标志值来获得该值,例如:
socket.send(data, flags=socket.MSG_OOB | socket.MSG_DONTROUTE)
要修复您的脚本,您必须将要发送的所有数据连接成一个字符串,并将其作为第一个参数传递给 socket.send
方法:
irc.send('NICK' + name + '\r\n')
irc.send('USER' + name + name + name + ':Python IRC\r\n')
# ...
【讨论】:
【参考方案2】:请发布实际的错误消息。 现在我能说的是你应该再看看你的发送方法。例如,用
irc.send ('NICK', name + '\r\n')
您将两个字符串传递给send
。根据
https://docs.python.org/2/library/socket.html
和
man 2 recv
标志参数必须是整数。
【讨论】:
【参考方案3】:我查找了这个问题,似乎你应该在那里放一个整数(UNIX套接字常量)让它工作,但是从你以后的代码中,我假设你只想提供消息但是这个可选参数,所以你可以改变
irc.send ('NICK', name + '\r\n')
irc.send ( 'USER', name, name, name, ':Python IRC\r\n' )
到
irc.send ('NICK' + name + '\r\n')
irc.send ( 'USER' + name + name + name + ':Python IRC\r\n' )
我猜你正在将python
的字符串连接运算符+
与来自其他一些语言的,
混合使用:)
我在我的盒子里测试了更改后的版本,它不会再导致错误了,虽然我仍然不知道这段代码是做什么的,请你解释一下:)
【讨论】:
以上是关于在我的脚本中获取“TypeError:需要整数”的主要内容,如果未能解决你的问题,请参考以下文章
使用 AJAX 在我的 HTML 文档中获取 PHP 文件,但其中的脚本不起作用
尝试在 Heroku 上托管 VueJS 应用程序。在 heroku 日志中获取“npm ERR!缺少脚本:开始”,在我的页面上获取“应用程序错误”
Discord 使用 url-query 中的“代码”发送 Oauth2 重定向 url。如何在我的谷歌脚本中获取该代码