UDP пакеты с адресом источника .255
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.02.16 07:57
Оценка:
Здравствуйте!

Пытаюсь принимать широковещательный UDP трафик (маска /24, .255). При этом адрес источника такой же — .255. И wireshark на винде, и tcpdump на линуксе показывают одно и то же. Это вообще нормально?

При этом моя линуксовая софтина в упор не видит этот трафик (читаю питоновскими 2.7 сокетами). Есть также софт эмулятор источника трафика, под винду. С него трафик идет с конкретного адреса, и моя софтина его нормально читает.

Где может быть проблема? В линуксе, в питоновских сокетах? Или то, что адрес источника равен адресу назначения — 192.168.0.255 для линукса и питона рояли не играет, и проблема где-то у меня?

# создаются сокеты как-то так:

    def add_sock(address):
        try:
            sk = socket(AF_INET, SOCK_DGRAM)
            sk.bind(address)

        except Exception as e:
            print 'Error: can\'t init socket: %s' % e
            sys.exit(1)

        sockets.append(sk)
        sock_num[sk] = add_sock.num    # Channel ID
        add_sock.num += 1


# чтение реализовано так:

        rx, tx, xx = select(sockets, [], [], 10.0)

        for sk in rx:
            pkt, addr = sk.recvfrom(mtu)
        ...


PS mtu определяется ранее и в итоге равно 1472. При этом длина пакетов, которые принимаются нормально — 1488, длина пакетов, которые не принимаются — 1420
Маньяк Робокряк колесит по городу
Re: UDP пакеты с адресом источника .255
От: Nikolay_Ch Россия  
Дата: 26.02.16 10:52
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Где может быть проблема? В линуксе, в питоновских сокетах? Или то, что адрес источника равен адресу назначения — 192.168.0.255 для линукса и питона рояли не играет, и проблема где-то у меня?

Может в том, что это броадкастовые пакеты? А Вы не установили опцию приема броадкастовых данных.
Re: UDP пакеты с адресом источника .255
От: andrey.desman  
Дата: 26.02.16 11:05
Оценка:
Здравствуйте, Marty, Вы писали:

M>
M># создаются сокеты как-то так:

M>    def add_sock(address):
M>        try:
M>            sk = socket(AF_INET, SOCK_DGRAM)
M>            sk.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
M>            sk.bind(address)

M>        except Exception as e:
M>            print 'Error: can\'t init socket: %s' % e
M>            sys.exit(1)

M>        sockets.append(sk)
M>        sock_num[sk] = add_sock.num    # Channel ID
M>        add_sock.num += 1
M>


См. жирным. address хоть бродкастовый (192.168.0.255)?
Re[2]: UDP пакеты с адресом источника .255
От: Nikolay_Ch Россия  
Дата: 26.02.16 11:08
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>address хоть бродкастовый (192.168.0.255)?

Биндить на броадкастовый нельзя.
Re[2]: UDP пакеты с адресом источника .255
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.02.16 11:11
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

M>>Где может быть проблема? В линуксе, в питоновских сокетах? Или то, что адрес источника равен адресу назначения — 192.168.0.255 для линукса и питона рояли не играет, и проблема где-то у меня?

N_C>Может в том, что это броадкастовые пакеты? А Вы не установили опцию приема броадкастовых данных.

Может вы внимательнее прочитаете мое сообщение, и поймете, что меня напрягает адрес источника, который равен бродкастному адресу назначения?
Маньяк Робокряк колесит по городу
Re[2]: UDP пакеты с адресом источника .255
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.02.16 11:14
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>См. жирным. address хоть бродкастовый (192.168.0.255)?


Нет, обычный адрес 192.168.0.1
SO_BROADCAST вроде отвечает за передачу бродкастов (прием всегда должен работать). Эта опция устанавливается, так как с сокета еще и рассылка производится, но проблема с приемом.
Маньяк Робокряк колесит по городу
Re: UDP пакеты с адресом источника .255
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.02.16 11:17
Оценка:
Здравствуйте, Marty, Вы писали:

M> Пытаюсь принимать широковещательный UDP трафик (маска /24, .255). При этом адрес источника такой же — .255. И wireshark на винде, и tcpdump на линуксе показывают одно и то же. Это вообще нормально?


Вроде решилась проблема — пнул разработчиков той подсистемы, теперь пакеты идут с нормальным адресом источника, и нормально принимаются. Вообще непонятно, разве так можно нормальными средствами сделать? Хотя, у них там QNS, может там и можно.

Но вообще интересно, кто эти пакеты отбрасывал? Линуксовый TCP-стек?
Маньяк Робокряк колесит по городу
Re[3]: UDP пакеты с адресом источника .255
От: andrey.desman  
Дата: 26.02.16 11:31
Оценка:
Здравствуйте, Marty, Вы писали:

M>SO_BROADCAST вроде отвечает за передачу бродкастов (прием всегда должен работать). Эта опция устанавливается, так как с сокета еще и рассылка производится, но проблема с приемом.


За прием тоже отвечает.
Re[3]: UDP пакеты с адресом источника .255
От: andrey.desman  
Дата: 26.02.16 11:32
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

AD>>address хоть бродкастовый (192.168.0.255)?

N_C>Биндить на броадкастовый нельзя.

Почему?
Re[4]: UDP пакеты с адресом источника .255
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.02.16 12:19
Оценка:
Здравствуйте, andrey.desman, Вы писали:

M>>SO_BROADCAST вроде отвечает за передачу бродкастов (прием всегда должен работать). Эта опция устанавливается, так как с сокета еще и рассылка производится, но проблема с приемом.


AD>За прием тоже отвечает.


Может я и ошибаюсь. Но микрософт тоже вроде о приеме только говорит:

The state of the SO_BROADCAST socket option determines whether broadcast messages can be transmitted over a datagram socket. This socket option applies only to datagram sockets.

https://msdn.microsoft.com/en-us/library/windows/hardware/ff570828(v=vs.85).aspx
Маньяк Робокряк колесит по городу
Re[5]: UDP пакеты с адресом источника .255
От: andrey.desman  
Дата: 26.02.16 12:47
Оценка:
Здравствуйте, Marty, Вы писали:

M>Может я и ошибаюсь. Но микрософт тоже вроде о приеме только говорит:


А линукс говорит и о приеме. Хотя по факту принмает и без него.
http://man7.org/linux/man-pages/man7/ip.7.html

Datagrams to broadcast addresses can be sent or received only when the SO_BROADCAST socket flag is set.


В man 7 socket говорится только об отправке.

Кстати, если у тебя не бродкастовый и не 0.0.0.0, то как ты вообще принимаешь бродкаст?
Отредактировано 26.02.2016 12:48 andrey.desman . Предыдущая версия .
Re[4]: UDP пакеты с адресом источника .255
От: Nikolay_Ch Россия  
Дата: 26.02.16 13:20
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Здравствуйте, Nikolay_Ch, Вы писали:


AD>>>address хоть бродкастовый (192.168.0.255)?

N_C>>Биндить на броадкастовый нельзя.

AD>Почему?

Согласен — сморозил, беру свои слова назад....
Re: тема :)
От: sunheretic13  
Дата: 04.03.16 17:46
Оценка:
Для приёма бродкаста — локальный сокет биндится на 0.0.0.0
Для приёма обычного пакета — биндится на конкретный адрес, типа 192.168.1.1

Так создав и забиндив несколько сокетов — один на 0.0.0.0, остальные — на существующие IP-адреса сетевых карт, при условии что порт везде одинаковый мы сможем ловить и бродкасты и одиночные пакеты.

Причём понять что был словлен именно бродкастовый пакет можно по локальному адресу биндинга (0.0.0.0).
порнуха
Re[2]: тема :)
От: Mr.Delphist  
Дата: 24.03.16 17:41
Оценка:
Здравствуйте, sunheretic13, Вы писали:

S>Для приёма бродкаста — локальный сокет биндится на 0.0.0.0

S>Для приёма обычного пакета — биндится на конкретный адрес, типа 192.168.1.1

Не-не-не, броадкастинг тут будет не при чём.

Re[2]: UDP пакеты с адресом источника .255
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.04.16 05:38
Оценка:
Здравствуйте, Marty, Вы писали:

M>Вроде решилась проблема — пнул разработчиков той подсистемы, теперь пакеты идут с нормальным адресом источника, и нормально принимаются. Вообще непонятно, разве так можно нормальными средствами сделать? Хотя, у них там QNS, может там и можно.


Сталкивался с одной VoIP железкой, которая при a=sendonly отправляла свой RTP поток с порта 0. Иногда такие интересности в стеке бывают...

M>Но вообще интересно, кто эти пакеты отбрасывал? Линуксовый TCP-стек?


Вполне возможно.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.