Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 349
1

Привязать HTTP клиент к определённому порту

31.10.2018, 09:51. Показов 2517. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую. Есть программа:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import socket
 
conn = socket.socket()
ipHost = socket.gethostbyname("www.club-nissan.ru")
 
conn.connect((ipHost, 80))
 
request = b"GET / HTTP/1.1\r\nHost: www.club-nissan.ru\r\n\r\n"
conn.send(request)
data = b""
tmp = conn.recv(1024)
 
while tmp:
    data += tmp
    tmp = conn.recv(1024)
print(data.decode("cp1251"))
conn.close()
Как узнать, через какой порт она выходит в сеть, и заставить выходить через задаваемый вручную?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2018, 09:51
Ответы с готовыми решениями:

Прослушивание сети (по определенному порту)
как реализовать?может быть есть примерный код или хотя бы код отдельных функций: 1) Прослушивание...

Доступ к порту определенному списку IP
Как реализовать на делфи некий Firewall, который даст доступ определенному списку IP доступ к...

Как сделать доступ к порту по определенному IP?
Подскажите, если кто делал такую вещь: на сервере есть определенный порт, на который должны...

Ограничение количества подключений по определенному порту
Возможно ли ограничить кол-во подключений по определенному порту с определенного IP адреса. ...

9
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,719
Записей в блоге: 2
31.10.2018, 13:25 2
Цитата Сообщение от Tankist 90 Посмотреть сообщение
conn.connect((ipHost, 80))
через 80-й ?
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 349
31.10.2018, 14:31  [ТС] 3
Цитата Сообщение от ft4l Посмотреть сообщение
через 80-й
А разве это не порт на сервере?
0
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,719
Записей в блоге: 2
31.10.2018, 15:10 4
Это порт на котором открывается соединение с ранее определённым с помощью gethostbyname() адресом.
сервер слушает входящие соединения на этом порту
// gethostbyname() тоже, возможно, по сети DNS-запрос выполняет, на 53-м вроде
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 349
31.10.2018, 21:35  [ТС] 5
ft4l, 80 это порт сервера на которые идёт запрос. Если изменить значение на любой другой - соединение просто не устанавливается...

Поэтому вопрос остаётся актуальным: как выпустить программу-клиент через задаваемый вручную порт?
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 349
02.11.2018, 16:36  [ТС] 6
Народ, скрипт коннектится к указанному ip и порту. Но я не понимаю через какой порт компьютера он шлёт запрос и как получает ip компьютера. В инете инфы по этому поводу не нашёл.
0
Невнимательный
2597 / 974 / 321
Регистрация: 08.02.2013
Сообщений: 5,719
Записей в блоге: 2
02.11.2018, 19:21 7
Порты компьютера и TCP-UDP-... порты это разные вещи
Из компа вообще по идее уходят пакеты
Код
Структура TCP-пакета
Поле 	 	Описание
----------------------------------------
Source port (Порт отправителя)  	Порт TCP узла-отправителя
Destination Port (Порт получателя) 	Порт TCP узла-получателя
Sequence Number (Порядковый номер) 	Номер последовательности пакетов
Acknowledgement Number (Номер подтверждения) 	Порядковый номер байта, который локальный узел рассчитывает получить следующим
Data Length (Длина данных) 	Длина TCP– пакета
Reserved (Зарезервировано) 	Зарезервировано для будущего использования
Flags (Флаги) 	Описание содержимого сегмента
Window (Окно) 	Показывает доступное место в окне протокола TCP
Checksum (Контрольная сумма) 	Значение для проверки целостности пакета
Urgent Pointer (Указатель срочности) 	При отправке срочных данных (поле Flags) в этом поле задается граница области срочных данных
Можно пробовать поменять порт найдя какой-нибудь прокси, возможно есть и бесплатые
и получить страницу например таким способом
https://www.calazan.com/how-to... s-package/
или c httplib или ещё с чем-то
не пробовал , не знаю какие вообще есть доступные прокси
и как это может помочь

Добавлено через 18 минут
https://ru.wikibooks.org/wiki/TCP/IP
Клиент, начиная соединение, запрашивает у своей ОС какой-нибудь незанятый порт во временное пользование, и указывает его в посланных пакетах как порт источника. Затем на этот порт он получит ответные пакеты от сервера.

Таким образом, сервер:

слушает на определённом порту, заранее известном клиенту
занимает этот порт всё время, пока не завершит работу
об IP-адресе и номере порта клиента узнаёт из приглашения, посланного клиентом

Клиент:

заранее знает IP-адрес и порт сервера
выбирает у себя произвольный порт, который освобождает после окончания соединения
посылает приглашение к соединению
1
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
02.11.2018, 22:42 8
Гугл говорит, что можно использовать bind на клиентской стороне, чтобы явно указать исходящий порт.
Но не рекомендует это делать
1
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 349
02.11.2018, 22:50  [ТС] 9
Цитата Сообщение от Black Fregat Посмотреть сообщение
можно использовать bind на клиентской стороне
Можете привести пример использования на стороне клиента? И почему не рекомендуется?
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
02.11.2018, 23:23 10
Лучший ответ Сообщение было отмечено Tankist 90 как решение

Решение

Python
1
2
3
4
5
6
7
conn = socket.socket()
ipHost = socket.gethostbyname("www.club-nissan.ru")
 
conn.bind(('0.0.0.0', 8080))  # забиндить свой порт для локального сокета
conn.connect((ipHost, 80))
ip,port = conn.getsockname()  # узнать какой локальный сокет подключения  ip:port 
print('%s:%s' % (ip, port))
P.S. Локальные порты раздает ОС - из числа доступных. Если укажите "занятый" - ничего не будет работать.
1
02.11.2018, 23:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2018, 23:23
Помогаю со студенческими работами здесь

Как собрать статистику доступа к определённому порту?
Как можно собрать статистику доступа по порту 80? Наверно iptables тут хватит?вполне подойдет...

Настройка DHCP на маршрутизаторе с игнорированием устройств, подключенных к определённому порту
Работаю в школе учителем информатики. В школе развернута старая WiFi сеть, с непонятным ноунейм...

Как привязать код к определенному домену?
Как привязать код к определенному домену? Например: определить домен окна самого верхнего...

Как привязать ProgressBar к определенному процессу
Доброго времени суток! Есть програмка которая рисует амплитуду аудио файла, как отобразить этот...

Как в TListView привязать данные к определенному столбцу?
Всем привет. Вопрос в следующем. У меня есть таблица TListView, я иногда в Design меняю местами...

Как привязать inline кнопку к определённому сообщению
Пишу бота по приёму заявок в техсервис. Делаю функцию назначения исполнителя к для каждой заявки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru