Python Socket | Помогите исправить ошибку

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
OS: Linux Mint (ну на Windows тоже проверял)
Python ver: python2

Приветствую.
Цель: создать socket, подключится к socks4 прокси, отправить буффер с информацией о ип сайта, получить recv, далее отправить header и получить recv (html сайта).

Проблема: ничего не выводит, видимо ошибка в буффере. Все перерыл, не понимаю, что не так. Думал, что проблема в плохих проксях и я купил какой-то тариф на сервисе, скачал 4к проксей и цикленно проходился по каждой из списка, но проблема все равно есть.

Не надо говорить про PySocks, я знаю, что она есть. Но мне надо без нее.

Заранее спасибо за помощь <3

Code (перекинул с пастебина сюда, спасибо @Student ):

Python:
import socket
import random
import time
ip2int = lambda ip: reduce(lambda a,b: long(a)*256 + long(b), ip.split('.'))

def haha():
    global proxies
    global ip
    while(True):
        try:
          
            print("Creating socket..")
            proxy = random.choice(proxies).split(":")
            s = socket.socket()
            s.settimeout(3)
            print("Socket created!")
            print("Connecting to socks4 proxy " + proxy[0] + ":" + proxy[1])
            s.connect((proxy[0], int(proxy[1])))

            print("Connected. Sending payload with ip " + ip)
            payload = b"\x04\x01\x00\x50" + bytes(socket.htonl(ip2int( ip ))) + b"\x00"
            s.sendall(payload)
            print(repr(payload))
            print("Payload sended. Getting info..")
            print(s.recv(4096))

            print("Sending header")
            payload = "GET / HTTP/1.1\r\n"
            payload += "Host: nodesdirect.com\r\n"
            payload += "\r\n"
            payload = payload.encode()

            s.sendall(payload)
            print(s.recv(4096))
            print("Header sended! Close connection.. \n")

        except Exception as e:
            print(str(e) + "\n")

in_file = open("proxylist.txt", "r")
proxyf = in_file.read()
in_file.close()
proxies = proxyf.split('\n')

ip = socket.gethostbyname("nodesdirect.com")

print("\n"+str(len(proxies)) + ' proxies!\n')

haha()
 
Последнее редактирование:

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
@pluswa код вставляется нормально если использовать тег [code=python]. Подробнее ознакомьтесь как вставить код тут: https://itfy.org/threads/kak-pravilno-sostavit-vopros-i-ne-poluchit-ban.1/
 
  • Мне нравится
Реакции: pluswa

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Пробывал убрать socket.htonl(). Тоже не але.
Пробывал payload = b"\x04\x01\x50\x00" + bytes(socket.htonl(ip2int( ip ))) + b"\x00" тоже нет.

Больше идей нет..
 

Rud356

Модератор
Команда форума
Модератор
Апр 5, 2020
44
21
8
Почему бы не использовать для получения данных и выгрузке оных в сеть по протоколу http библиотеку requests? Она должна быть гораздо удобнее и сразу автоматизировать работу по составлению запросов. И еще я не вижу у тебя условия выхода из цикла.
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Почему бы не использовать для получения данных и выгрузке оных в сеть по протоколу http библиотеку requests? Она должна быть гораздо удобнее и сразу автоматизировать работу по составлению запросов. И еще я не вижу у тебя условия выхода из цикла.
"Почему бы не использовать для получения данных и выгрузке оных в сеть по протоколу http библиотеку requests?" - на сокетах это быстрее. А так же желание изучить принципы работы с сокетами и socks прокси.

"И еще я не вижу у тебя условия выхода из цикла." - это и не надо, я сделал цикл чтобы прогонять каждую проксю.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
У вас в коде функция:
Python:
ip2int = lambda ip: reduce(lambda a,b: long(a)*256 + long(b), ip.split('.'))
работать не будет, потому что не импортирован reduce и в питоне нету long
нужно заменить ее на такую:
Python:
from functools import reduce
ip2int = lambda ip: reduce(lambda a, b: int(a) * 256 + int(b), ip.split('.'))
:
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Имортировал библиотеку. Проблема не решилась.

Log:

Creating socket..
Socket created!
Connecting to socks4 proxy 14.207.72.42:4145
Connected. Sending payload with ip 107.155.131.4
Payload: '\x04\x01\x00P75733867\x00'
Payload sended. Getting info..
Z
Sending header

Z - это так мне вывел print(s.recv(4096))
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Вот еще лог.. Все равно ничего не показывает..

Creating socket..
Socket created!
Connecting to socks4 proxy 212.24.148.234:34264
Connected. Sending payload with ip 107.155.131.4
Payload: '\x04\x01\x00P75733867\x00'
Payload sended. Getting info..

Sending header

Header sended! Close connection..
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример, через прокси выдает ответ:
Python:
import socket
import random
import time
from functools import reduce


ip2int = lambda ip: reduce(lambda a, b: int(a) * 256 + int(b), ip.split('.'))


def haha(proxies, ip):
    while(True):
        try:
            print("Creating socket..")
            proxy = random.choice(proxies).split(":")
            s = socket.socket()
            s.settimeout(3)
            print("Socket created!")
            print("Connecting to socks4 proxy " + proxy[0] + ":" + proxy[1])
            s.connect((proxy[0], int(proxy[1])))

            print("Connected. Sending payload with ip " + ip)
            payload = b"\x04\x01\x00\x50" + bytes(socket.htonl(ip2int(ip))) + b"\x00"
            s.sendall(payload)
            print("Payload sended. Getting info..")
            print(s.recv(4096))

            print("Sending header")
            payload = "GET / HTTP/1.1\r\n"
            payload += "Host: nodesdirect.com\r\n"
            payload += "\r\n"
            payload = payload.encode()

            s.sendall(payload)
            print(s.recv(4096))
            print("Header sended! Close connection.. \n")
            time.sleep(100)

        except Exception as e:
            print(str(e) + "\n")


with open('proxy_list.txt', 'r', encoding='utf-8') as f:
    proxyes = f.read().split('\n')

ip = socket.gethostbyname("nodesdirect.com")

print("\n" + str(len(proxyes)) + ' proxyes!\n')

haha(proxyes, ip)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример ответа:
Код:
b'HTTP/1.1 400 Bad Request\r\nServer: squid/3.5.27\r\nMime-Version: 1.0\r\nDate: Sat, 11 Apr 2020 16:35:07 GMT\r\nContent-Type: text/html;charset=utf-
8\r\nContent-Length: 3581\r\nX-Squid-Error: ERR_TOO_BIG 0\r\nVary: Accept-Language\r\nContent-Language: en\r\nX-Cache: MISS from c52369a6ef2b\r\nX-Cac
he-Lookup: NONE from c52369a6ef2b:3128\r\nVia: 1.1 c52369a6ef2b (squid/3.5.27)\r\nConnection: close\r\n\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0
1//EN" "http://www.w3.org/TR/html4/strict.dtd">\n<html><head>\n<meta type="copyright" content="Copyright (C) 1996-2017 The Squid Software Foundation a
nd contributors">\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n<title>ERROR: The requested URL could not be retrieved</title>
\n<style type="text/css"><!-- \n /*\n * Copyright (C) 1996-2017 The Squid Software Foundation and contributors\n *\n * Squid software is distributed u
nder GPLv2+ license and includes\n * contributions from numerous individuals and organizations.\n * Please see the COPYING and CONTRIBUTORS files for
details.\n */\n\n/*\n Stylesheet for Squid Error pages\n Adapted from design by Free CSS Templates\n http://www.freecsstemplates.org\n Released for fr
ee under a Creative Commons Attribution 2.5 License\n*/\n\n/* Page basics */\n* {\n\tfont-family: verdana, sans-serif;\n}\n\nhtml body {\n\tmargin: 0;
\n\tpadding: 0;\n\tbackground: #efefef;\n\tfont-size: 12px;\n\tcolor: #1e1e1e;\n}\n\n/* Page displayed title area */\n#titles {\n\tmargin-left: 15px;\
n\tpadding: 10px;\n\tpadding-left: 100px;\n\tbackground: url(\'/squid-internal-static/icons/SN.png\') no-repeat left;\n}\n\n/* initial title */\n#titl
es h1 {\n\tcolor: #000000;\n}\n#titles h2 {\n\tcolor: #000000;\n}\n\n/* special event: FTP success page titles */\n#titles ftpsuccess {\n\tbackground-
color:#00ff00;\n\twidth:100%;\n}\n\n/* Page displayed body content area */\n#content {\n\tpadding: 10px;\n\tbackground: #ffffff;\n}\n\n/* General text
 */\np {\n}\n\n/* error brief description */\n#error p {\n}\n\n/* some data which may have caused the problem */\n#data {\n}\n\n/* the error message r
eceived from the system or other software */\n#sysmsg {\n}\n\npre {\n    font-family:sans-serif;\n}\n\n/* special event: FTP / Gopher directory listin
g */\n#dirmsg {\n    font-family: courier;\n    color: black;\n    font-size: 10pt;\n}\n#dirlisting {\n    margin-left: 2%;\n    margin-right: 2%;\n}\
n#dirlisting tr.entry td.icon,td.filename,td.size,td.date {\n    border-bottom: groove;\n}\n#dirlisting td.size {\n    width: 50px;\n    text-align: r
ight;\n    padding-right: 5px;\n}\n\n/* horizontal lines */\nhr {\n\tmargin: 0;\n}\n\n/* page displayed footer area */\n#footer {\n\tfont-size: 9px;\n
\tpadding-left: 10px;\n}\n\n\nbody\n:lang(fa) { direction: rtl; font-size: 100%; font-family: Tahoma, Roya, sans-serif; float: right; }\n:lang(he) { d
irection: rtl; }\n --></style>\n</head><body id=ERR_TOO_BIG>\n<div id="titles">\n<h1>ERROR</h1>\n<h2>The requested URL could not be retrieved</h2>\n</
div>\n<hr>\n\n<div id="content">\n<p>The following error was encountered while trying to retrieve the URL: <a href="error:request-too-large">error:req
uest-too-large</a></p>\n\n<blockquote id="error">\n<p><b>The request or reply is too large.</b></p>\n</blockquote>\n\n<p>If you are making a POST or P
UT request, then the item you are trying to upload is too large.</p>\n<p>If you are making a GET request, then the item you are trying to download is
too large.</p>\n<p>These limits have been established by the Internet Service Provider who operates this cache. Please contact them directly if you fe
el this is an error.</p>\n\n<p>Your cache administrator is <a href="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_TOO_BIG&amp;body=CacheHost%3A%20
c52369a6ef2b%0D%0AErrPage%3A%20ERR_TOO_BIG%0D%0AErr%3A%20%5Bnone%5D%0D%0ATimeStamp%3A%20Sat,%2011%20Apr%202020%2016%3A35%3A07%20GMT%0D%0A%0D%0AClientI
P%3A%20145.255.8.72%0D%0A%0D%0AHTTP%20Request%3A%0D%0A%0D%0A%0D%0A">webmaster</a>.</p>\n<br>\n</div>\n\n<hr>\n<div id="footer">\n<p>Generated Sat, 11
Apr 2020 16:35:07 GMT by c52369a6ef2b (squid/3.5.27)</p>\n<!-- ERR_TOO_BIG -->\n</div>\n</body></html>\n'
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Какую версию питона вы использовали?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Какую версию питона вы использовали?
3.7
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Забыл sleep из кода убрать.
Python:
time.sleep(100)
Эту строку когда будете запускать нужно удалить или закомментировать.
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Запустил с python3.7

Генерируется такой пейлоад (я скратил, но там очень много x00 просто много). Может я что-то не так поставил или либы не хватает какой-то?
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
 

pluswa

Новичок
Пользователь
Апр 10, 2020
9
0
1
Да, почему то на python3.7 не правильно генерируется payload с буффером. Просто куча \x00\x00\ (не то что куча, а прям БОЛЬШАЯ) может либа не установлена какая-та?
 

Форум IT Специалистов