ВОПРОС · Q&A

Подключение к ip и получение статуса кода

10 ответов 2,5 тыс.
Решение
Вы не совсем поняли что я хочу сделать. Итак, у меня есть несколько ip камер и я хочу через терминал проверить их активность(если они в сети то подключение успешное, если нет, то соответственно ,нет) не больше не меньше.
Так чем http/urllib не подходят и что именно я "не совсем понял"? Я не думаю, что сокеты будут намного быстрее.

Python:
import http.client

conn = http.client.HTTPSConnection("google.com")
conn.request("GET", "/")
r1 = conn.getresponse()
print(r1.status)
Автор вопроса
Короче мне на питоне нужно подключиться к ip-адресу под определенным портом и получить статус кода. Модуль сокет будет приемлем?
 
Модуль сокет позволит подключиться.
Только какой статус код вы ожидаете увидеть?
Что за приложение/сервис вам должно его отправить?
 
Модуль сокет позволит подключиться.
Только какой статус код вы ожидаете увидеть?
Что за приложение/сервис вам должно его отправить?
Это должно быть ip камера (порты 80, 5000,8008...) А статус кода это статус подключения (200, 301,302,404,405 и до)
 
Это должно быть ip камера (порты 80, 5000,8008...) А статус кода это статус подключения (200, 301,302,404,405 и до)
Статус подключения 200, 301,302,404,405 отправляет веб сервер, он работает уровнем выше, чем сокет.
Уровень сокетов позволит вам понять, открыт порт или нет.
 
Статус подключения 200, 301,302,404,405 отправляет веб сервер, он работает уровнем выше, чем сокет.
Уровень сокетов позволит вам понять, открыт порт или нет.
Тоесть если я подключусь по ipпод портом и будет успешное подключение то порт открыт? А как понять что подключение успешное?
 
Тоесть если я подключусь по ipпод портом и будет успешное подключение то порт открыт? А как понять что подключение успешное?
Если подключение не вызвало ошибку, значит, вы подключились.
 
Зачем вам сокеты? Если вы дёргаете http, то можно использовать что-то более подходящее - http.client, urllib.request, requests.
 
Если подключение не вызвало ошибку, значит, вы подключились.
У этого модуля множество переменных для подключения к сети. Какие взять?

Зачем вам сокеты? Если вы дёргаете http, то можно использовать что-то более подходящее - http.client, urllib.request, requests.
Вы не совсем поняли что я хочу сделать. Итак, у меня есть несколько ip камер и я хочу через терминал проверить их активность(если они в сети то подключение успешное, если нет, то соответственно ,нет) не больше не меньше.

Код должен быт простым для интерпретатора, быстрым, производительным. Как вы поняли необходима высокая скорость. Поэтому я выбрал сокет как наиболее шустрый вариант из мне знакомых.
 
Решение
Вы не совсем поняли что я хочу сделать. Итак, у меня есть несколько ip камер и я хочу через терминал проверить их активность(если они в сети то подключение успешное, если нет, то соответственно ,нет) не больше не меньше.
Так чем http/urllib не подходят и что именно я "не совсем понял"? Я не думаю, что сокеты будут намного быстрее.

Python:
import http.client

conn = http.client.HTTPSConnection("google.com")
conn.request("GET", "/")
r1 = conn.getresponse()
print(r1.status)
 
У этого модуля множество переменных для подключения к сети. Какие взять?
Открываете документацию и выбираете нужный вам:
1612985835001.png

Желательно обернуть s.connect в блок исключений try/except
 
Простой код для проверки подключения к IP с определённым портом. В последней строке впишите свои данные

Python:
import socket


def port_scan(hostname, port_num):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(0.8)
    try:
        s.connect((hostname, port_num))
        print(hostname, 'Port:', port_num, "is open")
    except socket.error:
        print(hostname, 'Port:', port_num, "is closed")
    finally:
        s.close()


port_scan('127.0.0.1', 80)