Если в скрипте используется telnetlib, при попытке что-либо отправить телнетом вылетает ошибка
if IAC in buffer: TypeError: ‘in ‘ requires string as left operand
Фиксится так:
telnetconnection.write(‘just a test’).encode(‘latin-1′))
via mechanix
Если в скрипте используется telnetlib, при попытке что-либо отправить телнетом вылетает ошибка
if IAC in buffer: TypeError: ‘in ‘ requires string as left operand
Фиксится так:
telnetconnection.write(‘just a test’).encode(‘latin-1′))
via mechanix
function RussianToUnicode(S: String): String;
var Wrd:Word;
pW,pR:PWord;
len:Integer;
begin
pW:=@S[1];
len:=Length(S);
SetLength(Result,len);
pR:=@Result[1];
while Len<>0 do begin
Wrd:=pW^;
case Wrd of
$C0..$DF,$E0..$FF:pR^:=Wrd+$0350;
else pR^:=Wrd;
end;
inc(pW);
inc(pR);
dec(Len);
end;
end;
Strani4ka := RussianToUnicode(IdHTTP.Get('url'));
Искал, как отправлять письма с помощью пайтона, прямо такая проблема оказалась =)
Кошерный код:
from smtplib import SMTP
fromaddr = "***" # От кого
toaddr = "***" # Кому
subj='test'
text='<strong>hello world</strong>'
message = """From: <%(fromaddr)s>
To: <%(toaddr)s>
Subject: %(subj)s
MIME-Version: 1.0
Content-Type: text/html; charset=Windows-1251
Content-Transfer-Encoding: 8bit
%(text)s
"""
connect = SMTP('***')
connect.login('user','password')
connect.sendmail(fromaddr, toaddr, message % vars())
connect.quit()
Один знакомый попросил написать скрипт для скачивания картинок с имаджборд, он долбанутый на всю голову анимешник, и какую-то мангу покартиночно ему скачивать лень.
На выходе получаете текстовый файлик с кучей прямых ссылок на все картинки со всех страниц.
Скармливаете его любой качалке и получаете полный дамп картинок борды.
#-*- coding: cp1251 -*-
#Imageboard image parser
#http://www.yegorov-p.ru/
import re
import urllib2
#Настройки
#Адрес в виде http://www.2ch.ru
imgboard="http://www.2ch.ru"
#Борда в виде /b/
prefix="/b/"
#Количество страниц
max_page=8
reply_str="Reply"
agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8"
f = open('dump.txt', 'w')
for j in range(0,max_page):
print 'Parsing page# '+str(j)
opener = urllib2.build_opener()
#получаем нужную инфу
if j==0:
request = urllib2.Request(imgboard+prefix, None, {"User-Agent": agent})
else:
request = urllib2.Request(imgboard+prefix+str(j)+'.html', None, {"User-Agent": agent})
handle = opener.open(request)
data = handle.read()
handle.close()
pages = re.findall(''+reply_str,data)
if pages:
pages.sort()
last = pages[-1]
for i in range(len(pages)-2, -1, -1):
if last == pages[i]:
del pages[i]
else:
last = pages[i]
for i, elem in enumerate(pages):
request = urllib2.Request(imgboard+prefix+'res/'+pages[i], None, {"User-Agent": agent})
handle = opener.open(request)
data = handle.read()
handle.close()
rez = re.findall('/src/(.*?)" ',data)
rez=rez[::2]
for i, elem in enumerate(rez):
source = imgboard+prefix+"src/"+rez[i]
f.write(source+'\n')
f.close()
Итак, сегодня я вкратце расскажу о накрутке голосов в различных интернет-голосованиях.
Что это вообще такое и зачем нужно? Например, есть некий конкурс вроде «Проголосуй за лучшую фотку», за победу в котором дается некий приз. Или не дается =) Организаторами предполагается, что один человек может проголосовать один раз. Обычно один раз в день, а не просто один раз за голосование – для пущего драматизма. Для предотвращения накрутки обычно применяются два способа: запись куки и запись IP-адреса. Это наиболее распространенный способ, бывает и вариант с обязательной регистрацией и так далее.
Итак, требуется обойти два ограничения: куки и ip-адрес. C куками все понятно, их мы просто не будем запоминать =) С ip-адресами все немного сложнее – есть два очевидных способа обхода этого ограничения: прокси и тор. С тором более-менее понятно: подключаемся к сети, голосуем, меняем адрес и так до упора =) С прокси же основная проблема состоит в том, что нужно найти рабочие прокси. К примеру, найти их можно на сайте samair.ru, благо есть и мой готовый парсер, найти который можно здесь.
Использование списка прокси-серверов.
Собственно, как оно работает: открывается файлик с проксями, надерганных при помощи этого скрипта, построчно берется текущий прокси-сервер, эмулируется POST-запрос, каждый раз от «разного» браузера, чтобы не палиться =)
# -*- coding: cp1251 -*-
import urllib
import re
import random
import socket
import urllib2
import telnetlib
import time
socket.setdefaulttimeout(12)
i=0
agent=["Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061022 Iceweasel/1.5.0.7-g2",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)",
"Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.21-rc1; x86_64; cs, en_US) KHTML/3.5.6 (like Gecko)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19) Gecko/20081201 Firefox/2.0.0.19",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1",
"Opera/9.02 (Windows NT 5.1; U; en)",
"Opera/9.23 (Windows NT 5.1; U; ru)",
"Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"]
file_object = open('list_.txt', 'r')
try:
for line in file_object:
i=i+1
try:
cur_agent=agent[random.randint(0, len(agent))-1]
res_str=''
rez=[]
post = urllib.urlencode({"vote":'1',"x":random.randint(10, 100),'y':random.randint(1, 10)})
request = urllib2.Request("http://tula.kp.ru/daily/forumcontest/photo/58150 ",post)
request.add_header('User-agent', cur_agent)
request.add_header('Accept-Language', 'ru,en-us;q=0.7,en;q=0.3')
request.add_header('Accept-Encoding', 'gzip')
request.add_header('Accept-Charset', 'windows-1251,utf-8;q=0.7,*;q=0.7')
request.add_header('Connection', 'keep-alive')
request.add_header('Referer', 'http://tula.kp.ru/daily/forumcontest/photo/58150')
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
request.set_proxy(line[:-1], 'http')
page = urllib2.urlopen(request).read()
print 'voted'
except:
print 'Dead!'
finally:
file_object.close()
Использование TOR
Основное отличие от предыдущей версии в том, что адреса, через которые происходит голосование, не являются прокси, а узлами сети Tor. Соответственно, на компьютере, где будет запускаться данный скрипт, должен быть работающий клиент этой сети. В принципе, код понятен, поясню только момент с телнетом. Данная последовательность команд приводит к принудительной смене узла, что обеспечивает возможность повторного голосования.
# -*- coding: cp1251 -*-
# Tor voter
# http://yegorov-p.ru/
import urllib
import re
import random
import socket
import urllib2
import telnetlib
import time
socket.setdefaulttimeout(12)
i=0
agent=["Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061022 Iceweasel/1.5.0.7-g2",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.25 Safari/525.19",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)",
"Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.21-rc1; x86_64; cs, en_US) KHTML/3.5.6 (like Gecko)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19) Gecko/20081201 Firefox/2.0.0.19",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1",
"Opera/9.02 (Windows NT 5.1; U; en)",
"Opera/9.23 (Windows NT 5.1; U; ru)",
"Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"]
for i in range(1,250):
try:
cur_agent=agent[random.randint(0, len(agent))-1]
res_str=''
rez=[]
post = urllib.urlencode({"vote":'1',"x":random.randint(10, 100),'y':random.randint(1, 10)})
tn = telnetlib.Telnet('127.0.0.1', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write("AUTHENTICATE\r\n")
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
time.sleep(5)
#TOR
request = urllib2.Request("http://tula.kp.ru/daily/forumcontest/photo/51927 ",post)
request.add_header('User-agent', cur_agent)
request.add_header('Accept-Language', 'ru,en-us;q=0.7,en;q=0.3')
request.add_header('Accept-Encoding', 'gzip')
request.add_header('Accept-Charset', 'windows-1251,utf-8;q=0.7,*;q=0.7')
request.add_header('Connection', 'keep-alive')
request.add_header('Referer', 'http://tula.kp.ru/daily/forumcontest/photo/51927')
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
request.set_proxy('127.0.0.1:8118', 'http')
page = urllib2.urlopen(request).read()
rez=re.findall('
<div>(.+?)</div>
',page)
res_str=res_str+' '+rez[0]
rez=re.findall("Голосов: (.+?)",page)
res_str=res_str+' '+rez[0]
print str(i)+' '+res_str
except:
print 'Oops!'