连接到 IRC 时的套接字问题
Socket issue when connecting to IRC
我正在尝试创建一个非常简单的 python 机器人,它会加入一个特定的频道,并在每次有人说任何话时随机说一个短语。我这样做主要是为了了解套接字和 IRC 是如何工作的。我收到以下错误消息:
Traceback (most recent call last):
File "D:/Users/Administrator/Documents/Classwork/Dropbox/Bots/Rizon Bot/ViewBot.py", line 36, in <module>
irc.connect((irc_server, 6667))
File "D:\Users\Administrator\Documents\Classwork\Dropbox\Bots\Rizon Bot\socks.py", line 351, in connect
_orgsocket.connect(self,(self.__proxy[1],portnum))
File "C:\Python27\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
TypeError: an integer is required
Process finished with exit code 1
当运行如下代码:
import random
from urlparse import urlparse
import socks
import socket
import time
#---- Definitions ----#
#Proxylist
proxy_list = []
with open("proxy_list.txt") as f:
proxy_list = f.readlines()
#IRC Name List
irc_names = []
with open("irc_names.txt") as f:
irc_names = f.readlines()
#Phrase List
phrase_list = []
with open("phrase_list.txt") as f:
phrase_list = f.readlines()
irc_server = "irc.rizon.net"
irc_port = 6667
irc_channel = '#test12' # Change this to what ever channel you would like
queue = 0
#---- Code ----#
proxy = random.choice(proxy_list)
hostname = proxy.split(":")[0]
port = proxy.split(":")[1]
#irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc = socks.socksocket()
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
irc.connect((irc_server, 6667))
print irc.recv ( 4096 )
irc.send ( 'NICK ' + random.choice(irc_names) + '\r\n' )
irc.send ( 'USER botty botty botty :Sup\r\n' )
irc.send ( 'JOIN ' + irc_channel + '\r\n' )
time.sleep(4)
irc.send('PRIVMSG ' + irc_channel + ' :' + random.choice(phrase_list) + '\r\n')
while True:
data = irc.recv ( 4096 )
print data
if data.find('KICK') != -1:
irc.send('JOIN '+ irc_channel + '\r\n')
if data.find('') != -1: # !test command
irc.send('PRIVMSG ' + irc_channel + ' :' + (random.choice(phrase_list)) + '\r\n')
我认为问题在于:
irc.connect((irc_server, 6667))
我的目标是使用从代理列表加载的代理连接到 IRC 服务器。有任何想法吗?
您正在确定代理端口
port = proxy.split(":")[1]
然后你将它传递给袜子:
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
但它仍然是一个字符串。我敢打赌,如果您将后者更改为
,它会起作用
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, int(port))
在您调用 irc.connect
之前,它实际上并没有 使用,但它是来自 setproxy 的端口。
这些行:
port = proxy.split(":")[1]
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
将导致端口成为包含所需端口号的 字符串 。端口需要 integer
。将您的代码更改为:
port = int(proxy.split(":")[1])
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
根据需要将端口从字符串转换为整数。
我正在尝试创建一个非常简单的 python 机器人,它会加入一个特定的频道,并在每次有人说任何话时随机说一个短语。我这样做主要是为了了解套接字和 IRC 是如何工作的。我收到以下错误消息:
Traceback (most recent call last):
File "D:/Users/Administrator/Documents/Classwork/Dropbox/Bots/Rizon Bot/ViewBot.py", line 36, in <module>
irc.connect((irc_server, 6667))
File "D:\Users\Administrator\Documents\Classwork\Dropbox\Bots\Rizon Bot\socks.py", line 351, in connect
_orgsocket.connect(self,(self.__proxy[1],portnum))
File "C:\Python27\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
TypeError: an integer is required
Process finished with exit code 1
当运行如下代码:
import random
from urlparse import urlparse
import socks
import socket
import time
#---- Definitions ----#
#Proxylist
proxy_list = []
with open("proxy_list.txt") as f:
proxy_list = f.readlines()
#IRC Name List
irc_names = []
with open("irc_names.txt") as f:
irc_names = f.readlines()
#Phrase List
phrase_list = []
with open("phrase_list.txt") as f:
phrase_list = f.readlines()
irc_server = "irc.rizon.net"
irc_port = 6667
irc_channel = '#test12' # Change this to what ever channel you would like
queue = 0
#---- Code ----#
proxy = random.choice(proxy_list)
hostname = proxy.split(":")[0]
port = proxy.split(":")[1]
#irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc = socks.socksocket()
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
irc.connect((irc_server, 6667))
print irc.recv ( 4096 )
irc.send ( 'NICK ' + random.choice(irc_names) + '\r\n' )
irc.send ( 'USER botty botty botty :Sup\r\n' )
irc.send ( 'JOIN ' + irc_channel + '\r\n' )
time.sleep(4)
irc.send('PRIVMSG ' + irc_channel + ' :' + random.choice(phrase_list) + '\r\n')
while True:
data = irc.recv ( 4096 )
print data
if data.find('KICK') != -1:
irc.send('JOIN '+ irc_channel + '\r\n')
if data.find('') != -1: # !test command
irc.send('PRIVMSG ' + irc_channel + ' :' + (random.choice(phrase_list)) + '\r\n')
我认为问题在于:
irc.connect((irc_server, 6667))
我的目标是使用从代理列表加载的代理连接到 IRC 服务器。有任何想法吗?
您正在确定代理端口
port = proxy.split(":")[1]
然后你将它传递给袜子:
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
但它仍然是一个字符串。我敢打赌,如果您将后者更改为
,它会起作用irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, int(port))
在您调用 irc.connect
之前,它实际上并没有 使用,但它是来自 setproxy 的端口。
这些行:
port = proxy.split(":")[1]
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
将导致端口成为包含所需端口号的 字符串 。端口需要 integer
。将您的代码更改为:
port = int(proxy.split(":")[1])
irc.setproxy(socks.PROXY_TYPE_HTTP, hostname, port)
根据需要将端口从字符串转换为整数。