работы с контроллером двери, под линуксом все замечательно работает а под фри ни в какую не хочет.
Код
https://pastebin.com/0KcALrvT
tcpdump
https://pastebin.com/iJ9kmrf8
Посмотрев в вайршайке я вижу, что у нас передается в данных 36 байт, а должно передаваться 8
Неправильно
Data: 450000247244000080110000c0a8fb11c0a8fb8d0ce90ce9001000000107fe3200002b02
Правильно
Data: 0107fe3200002b02
Что я делаю не так?
4500... это заголовок IP-пакета, если хочется его вручную задавать, надо IP_HDRINCL включать, иначе система сформирует IP-заголовок сама, см. man 4 ip
setsockopt(SOCKET, getprotobyname('udp'), IP_HDRINCL, pack("H*", '450000247244000080110000c0a8fb11c0a8fb8d0ce90ce900100000')); $packet = pack("H*", '0107fe3200002b02'); Спасибо, это частично решило мою проблему, теперь данные передаются правильно т.е. только 8 байт, но по прежнему ругается на неизвестный протокол 00:44:11.537946 90:e2:ba:49:a6:7c > 02:00:00:8e:ea:fe, ethertype IPv4 (0x0800), length 42: (tos 0x0, ttl 64, id 25341, offset 0, flags [none], proto unknown (255), length 28, bad cksum 0 (->9f05)!) 192.168.251.1 > 192.168.251.141: ip-proto-255 8
а нахрена так через жопу если это тривиальный UDP на порт 3305?
советую всё же не хардкодить IP-заголовок, а заполнить нужные его поля и дать системе посчитать хоть ту же чексумму
Затем, что нужно подменять исходный айпи адрес на адрес сервера, если отправлять пакет со своим адресом то контроллер не реагирует
Обсуждают сегодня