Если в скрипте используется 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'));

via Королевство Delphi

Искал, как отправлять письма с помощью пайтона, прямо такая проблема оказалась =)
Кошерный код:

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()

Накрутка голосов

23

Итак, сегодня я вкратце расскажу о накрутке голосов в различных интернет-голосованиях.
Что это вообще такое и зачем нужно? Например, есть некий конкурс вроде «Проголосуй за лучшую фотку», за победу в котором дается некий приз. Или не дается =) Организаторами предполагается, что один человек может проголосовать один раз. Обычно один раз в день, а не просто один раз за голосование – для пущего драматизма. Для предотвращения накрутки обычно применяются два способа: запись куки и запись 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!'
Page 3 of 3« Previous123