2015-07-17 2 views
1

Я пытаюсь получить время полета для пакета между двумя малинами pis, которые настроены как точки доступа.можно ли отправлять UDP-трансляции через Wi-Fi без подключения к сети?

Прямо сейчас я могу передавать широковещательную передачу между ними, пока они подключены к одной и той же сети.

Моя мысль заключалась в том, что я мог отправлять широковещательные рассылки UDP без их подключения к сети, подобно тому, как отправляются пакеты маяков и запросы зонда.

это мой код сервера, я использую wirehark для приема пакетов с другой стороны.

import sys, time 
import socket, IN 

port = 22222 
interface = "wlan0" 
broadcast = "255.255.255.255" 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
s.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, interface + "\0") 

while 1: 
    s.sendto("test data", (broadcast, port)) 
    time.sleep(2) 

Кто-нибудь знает, возможно ли это? точка в правильном направлении будет оценена :)

ответ

4

Невозможно отправить/получить пакеты UDP/IP, когда устройство не подключено к сети. IP-уровень требует, чтобы связанный уровень был подключен.

Маячные пакеты и запрос зонда не требуют подключенной сети, но они не являются IP-пакетами (они вообще не имеют IP-заголовка), поэтому их невозможно создать и отправить через гнезда AF_INET. Исходные пакеты на wifi могут быть созданы и отправлены через raw-сокет. Но если вы попытаетесь создать пакет с заголовком IP и UDP вручную и отправить его в сеть, никто не ответил бы на него, потому что отправитель не подключен к сети.

Библиотека python https://github.com/kbandla/python-wifitools поддерживает создание необработанных сообщений 802.11, таких как маяковый пакет, но вы никогда не будете отправлять действительный пакет UDP/IP, если узел не подключен.

+0

Awesome, спасибо за эту информацию .. Это то, что я искал! –