Python 得到一个;TypeError:需要一个整数";在我的剧本里

Python 得到一个;TypeError:需要一个整数";在我的剧本里,python,string,sockets,python-2.7,irc,Python,String,Sockets,Python 2.7,Irc,出于教育原因,我正在尝试使用Python制作僵尸网络,但我一直遇到以下错误: TypeError:需要一个整数 这是我的剧本: import os import socket import random import string # string.letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' a = random.choice(string.letters) b = random.choice(string

出于教育原因,我正在尝试使用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

请发布实际的错误消息。 现在我能说的是,你应该再看看你的发送方法。例如,与

irc.send ('NICK', name + '\r\n')
您正在将两个字符串传递给
send
。根据 及


标志参数必须是整数。

我查找了这个问题,似乎您应该在那里放一个整数(UNIX套接字常量)让它工作,但是从您以后的代码中,我假设您只想给出消息,但这个可选参数,所以您可以更改

irc.send ('NICK', name + '\r\n')
irc.send ( 'USER', name, name, name, ':Python IRC\r\n' )

我猜您是在将
python
的字符串连接运算符
+
与其他一些语言的
混合使用:)
我在我的测试箱中测试了更改后的版本,它不会再导致错误,尽管我仍然不知道这段代码的作用,请您解释一下:)

第21行的脚本错误,
irc.send('NICK',name+'\r\n')

字符串
参数是要发送的数据。
flags
参数是可选标志,与Unix
man 2 recv
中描述的标志相同。有关详细信息,请参阅

基本上,
flags
参数是一个整数值,默认值为
0
。Unix手册页中描述的标志值在
socket
模块中作为常量提供,您可以通过使用OR逻辑操作组合所需的标志值来获得该值,例如:

socket.send(data, flags=socket.MSG_OOB | socket.MSG_DONTROUTE)
要修复脚本,必须将所有要发送的数据连接到一个字符串中,并将其作为第一个参数传递给
套接字。send
方法无处不在:

irc.send('NICK' + name + '\r\n')
irc.send('USER' + name + name + name + ':Python IRC\r\n')
# ...

请格式化您的代码并发布完整的回溯,哪行抛出错误? Traceback (most recent call last): File "botnet.py", line 21, in irc.send('NICK', name + '\r\n') TypeError: an integer is required
socket.send(string[, flags])
socket.send(data, flags=socket.MSG_OOB | socket.MSG_DONTROUTE)
irc.send('NICK' + name + '\r\n')
irc.send('USER' + name + name + name + ':Python IRC\r\n')
# ...