Пакет mtrpacket можно использовать для отправки сетевых проб, которые могут выполнять пинг или трассировку. Поскольку он использует бэкэнд для инструмента командной строки mtr, он не требует, чтобы ваш скрипт выполнялся от имени пользователя root.
Он также использует цикл событий Asyncio, так что вы можете иметь несколько текущих трассировок или эхо-запросов одновременно и обрабатывать их результаты по мере их завершения.
Вот скрипт Python для трассировки на example.com:
import asyncio
import mtrpacket
async def trace():
async with mtrpacket.MtrPacket() as mtr:
for ttl in range(1, 256):
result = await mtr.probe('example.com', ttl=ttl)
print(result)
if result.success:
break
asyncio.get_event_loop().run_until_complete(trace())
Цикл с 'ttl' используется, потому что «время жизни» исходящего пакета определяет количество сетевых скачков, которые будет проходить пакет до истечения срока его действия, и отправки ошибки обратно в исходный источник.