LINUX.ORG.RU

udpxy сервер (ответ рабочей ссылки)

 ,


1

2

Доброго времени суток! Помогите разобраться: Имеется ссылка «http://XXX.XXX.XX.X:81/udp/XXX.1.1.81:1234» это IPTV канал он рабочий. Как на python3 можно получить ответ что ссылка рабочая? По адресу «http://xxx.xxx.xx.x:81» находится udpxy сервер. По адресу «http://xxx.xxx.xx.x:81/status/» можно узнать что адрес рабочий. Из полной ссылки пытался получить ответ используя requests но ничего не получилось. Возможно нужно использовать socket но не могу разобраться как. Задача узнать что ссылка живая и просто занести ее в список (для примера).

Буду признателен за помощь, я новичок еще строго не судите ).

Как-то так на 3.7, если поток не рабочий check выкинет эксепшен, который надо обработать.

import asyncio
import aiohttp


URL = 'http://rtmp.domain.tld:2300'


async def check(url, chunk_size, timeout_sec):
    timeout = aiohttp.ClientTimeout(total=timeout_sec)
    async with aiohttp.ClientSession() as session:
        async with session.get(url, timeout=timeout) as resp:
            content = await resp.content.read(chunk_size)
            assert chunk_size == len(content)


asyncio.run(check(URL, 256, 5))

Если хочется request и синхронности, то по сути также.

vvn_black ★★★★★ ()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Большое спасибо! Я нашел немного другое решение: использую requests и читаю raw.read(xxx) этого достаточно чтобы понять что видеопоток идет. Интересно а ка-то узнать содержимое примерно этого ответа «b'G\x00\xdb\x11\xc2pX\xa9\x89\xf7~\x8f6\xf5*\xa8b6\x1b\xfa\xf9\xe1+k\xe1A\xda=f&XK\x86\xb4\x1b\xb5|(\x1d\x1d\xf6\xcbn\x95\xca\xa2\x19:V\x10\xa9\x8f\xb6\x82\xfe3\xc1o\xb6 \xbe\n\xd0\x96x\x1f\xc2\x1a\x05\x8c\x00|\xe7\xf9\xf7\x8d\xe1v\xef\x83\x1fL\xee\xfb\xe5|\xd2\xaf\xe84\x92\xbe\xf8\xf2g\xe0\xcfO\x86\x8df\x8e\x17\xad\x07\x84\'\xf6\xf2H\x12\x8c\x9dU\xc8p\xd2\xcf\xc5@r\x1dO\xe7\xaar\xd3\x8e\x05_\xd2\x89C\xf2< C\xf1\x88o\x19\xe4\xce\xdf<\xd9\xa3\xfa\x06\xc3\x8f\xcb\x18\x01\xb5\x831\x1d\x05\xfeH\x0bG\xf5C\x8e\xaa\x10(\x8e%,\xa8D\xa8\x04\x01;» возможно? И если несложно подскажите пожалуйста как можно ваш код запустить на python 3.6 как я понял «asyncio.run» появилось в python 3.7.2 а на python 3.6.7 нужно делать иначе. Асинхронное программирование очень интересная тема обязательно изучу, признаюсь на сегодня я об этом еще даже не слышал. ( Еще раз спасибо! )

Alecsandr1980 ()
Ответ на: комментарий от Alecsandr1980

запустить на python 3.6

loop = asyncio.get_event_loop()

try:
    loop.run_until_complete(check(URL, 256, 5))
except:
    pass
finally:
    loop.close()

Интересно а ка-то узнать содержимое примерно этого ответа

Логичный вопрос, а зачем? Как я понял, цель - определить, что ссылка рабочая, значит достаточно прочитать «сырых» данных, можно ещё проверить, что это не текст.

vvn_black ★★★★★ ()
Ответ на: комментарий от vvn_black

Спасибо большое, я так и сделал.

Интересно а ка-то узнать содержимое примерно этого ответа
Логичный вопрос, а зачем?

Аппетит приходит во время еды. Исследуя поток в VLC плеере увидел что в «Информации о кодеке» есть название канала, значит оно передается с потоком. Было бы неплохо вытащить ее от туда.

Попробовал прочитать фрагмент raw потока с помощью scapy

data = b'G\x0b\xc2\x16\xe0\xd0 \x80\x01\\\xf6\x95{\xec\xbd}jI\x86\xc3[\xa2Q5\x9e\xcf\xc1\x95D\x99\xe4\x8f\x10K\xd5\xd8=3.g-{\xb1\xfd\xc0\xbb\xd8\xcbk\xd0\x0e\ ----- и тд. ----'
Radius(data).show()

Выводится примерно это (фрагмент):

###[ RADIUS ]### 
  code      = 71
  id        = 11
  len       = 49686
  authenticator= e0d02080015cf6957becbd7d6a4986c3
  \attributes\
   |###[ Radius Attribute ]### 
   |  type      = Tunnel-Server-Auth-ID
   |  len       = 162
   |  value     = 'Q5\x9e\xcf\xc1\x95D\x99\xe4\x8f\x10K\xd5\xd8=3.g-{\xb1\xfd\xc0\xbb\xd8\xcbk\xd0\x0e\xf4\x0cb\xd9H$\x92\xd0\xc6\x0e\xba/\xa8[\x02\xa8\xc4N~\xf1y\xect\x1d\x07\x12\xe58\n\xe6\x16\xef\xffe\x17\xafU\xd04\xb3{W\x86l\xfc\x92\xd0\x81\xfa`\x81\x12.\x1a\xe3l\xde\x16\x1e\xd1\x8e\r\x83\xbc\xd8C+\x8e\x93\x1a\x80Bx\xff\xf8g.\x88\xad\xcb\xe1\x02\xff\x97\x10Z\x848\xfa\x06\xc3\x81Ynd\xdf6\xe0\xa9|#:\n\x9b\xc90\xc8\x91L\n2\x1eq%L\xf7iN4\xa2\xdaK\xce`DO#\xee\xd9\xf6\x0c'
   |###[ Radius Attribute ]### 
   |  type      = Management-Transport-Protection
   |  len       = 106
   |  value     = '\n\xbeY\xdfG\x0b\xc2\x17\xf5\x12\xad\x8eT-\xb0\x7f\xab\xf8\xc9E\x1b\xfb\xdc\x16#9\x17A\xb6\x99\xcb\x9fW\r\xa1`W\xbe\xce\xa6W\x82\xdc|a\xb2\xe7\xd8zv\x0f\x8f3\xbe\xaf*\x85\xce;C\x00\xec\x10\x9d\xd7\xa8\xdb\xbd\\\xc7S\xca\xc3i\xc1\xa9\x9c9\x826#g\x18g\x97U\x89\x1f\x1d<\xb3\xc2\xf7\x00A~\xee\x0e\x13\xe2L\xe8\xef\x07'

Значения value я так понимаю закодированы. Я Scapy не знаю, возможно таем есть такая возможность возможно он для этого вообще не нужен, а делается по другому. Теперь мне это стало интересно, вытащить из потока сведения которые передаются.

Alecsandr1980 ()