在我的脚本中获取“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'):

回溯(最近一次通话最后): 文件“botnet.py”,第 21 行,在 irc.send('NICK', name + '\r\n') TypeError:需要一个整数

这是因为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。如何在我的谷歌脚本中获取该代码

在IE上下文菜单扩展中获取页面URL

脚本在我的字符 LCD 上显示 Unicode

如何获取 JS 脚本的树枝数据