The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"обратный адрес пакета"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"обратный адрес пакета"
Сообщение от vasa emailИскать по авторуВ закладки on 25-Июл-01, 02:50  (MSK)
как узнать обратный адрес пакета,
полученного с помощью recv() или read() ?
(recvfrom не предлагать :)
Спасибо!
PS Извините за глупый вопрос :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: обратный адрес пакета"
Сообщение от Cheshir emailИскать по авторуВ закладки on 25-Июл-01, 14:05  (MSK)
Усе просто:
sockaddr_in addr; getpeername(sock,&addr,sizeof(sockaddr_in));
во всяком случае, судя по инфам, должно робить...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: обратный адрес пакета"
Сообщение от vasa emailИскать по авторуВ закладки on 25-Июл-01, 20:05  (MSK)
Дело в том,  что над socket-ом не была
проведена операция connect ->
поэтому вызывается error:
Socket not connected
или похожими словами :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: обратный адрес пакета"
Сообщение от Cheshir emailИскать по авторуВ закладки on 26-Июл-01, 11:48  (MSK)
ну, там, вроде, еще есть чтой-то типа recvmsg, но этого я уже не помну :) см man recv :) или там в info тож чего-то, помнится, есть... даже немного подробней :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: обратный адрес пакета"
Сообщение от vasa emailИскать по авторуВ закладки on 26-Июл-01, 18:28  (MSK)
Да, но мне нужно именно read().
Я перехватываю IO опереации над сокетами
и заранее не знаю какой функцией чтения
пользуется application.

Еще идеи ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 26-Июл-01, 19:26  (MSK)
Стоп. С чем работает read и recv ? Правильно, только с сокетами, которые требуют соединения и имеют установленное соединение ! В частности, по протоколу TCP или UNIX-сокеты. А ты пытаешься примениять их ко всем сокетам ? Оригинально.
И что это за application ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: обратный адрес пакета"
Сообщение от vasa emailИскать по авторуВ закладки on 27-Июл-01, 05:49  (MSK)
вышеназванные вызовы работают
и без соединения.
Пример -- UDP датаграммы.
А application - tftpd.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 30-Июл-01, 14:42  (MSK)
Хм... Кусок мана:

The recv call is normally used only on a connected socket (see connect(2)) and is identical to recvfrom with a NULL from parameter.

...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "RE: обратный адрес пакета"
Сообщение от Cheshir emailИскать по авторуВ закладки on 31-Июл-01, 15:45  (MSK)
ну так ты гляди - видишь "normally"? :)))
а если "unnormally", то все подряд :))) только надо знать, как... Для того, чтобы знать, надо читать не только man, но и шарить по исходникам  :)))).
Как сказал однажды один человек (вроде бы, RZ), Unix - это один здоровый фильтр. Так вот, в системных вызовах типа "recv" и т.п. можно указывать (куда бы и как бы ни был прикручен сокет, даже если он просто открыт и не прикручен) любой способ фильтрации, применимый к конкретному случаю; а recvmsg является и фильтром, и запихивает в структуру все че можно об мессаге.
Во всяком случае, вышесказанное было верно для Linux'a на 2.2.17-м ядре :))).
  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 02-Авг-01, 01:17  (MSK)
О ! В самом конце ты приблизился к сути :))
Откуда ты знаешь, что в последующих ядрах будет точно так же ? Откуда ты знаешь, что в 2.2.17-ac1, например, не пропатчили это дело ?
Не будешь же ты лазить по исходникам каждого нового ядра или патча, чтобы посмотреть как оно там сейчас работает :))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "RE: обратный адрес пакета"
Сообщение от Cheshir emailИскать по авторуВ закладки on 02-Авг-01, 13:51  (MSK)
Скажу так: я не знаю :) но предполагаю, что это не изменится с появлением новых ядер. Просто, как мне кажется, эти пути являются достаточно стандартными и патчить их никто не будет :), просто тогда многие полезные утилки перестанут работать :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 03-Авг-01, 17:48  (MSK)
Хех :))
А как же переход с libc5 на libc6 ? Или забылыли уже, сколько было траха с переносом программ ? Приходилось держать обе версии либ, чтобы более менее работать нормально.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 15-Авг-01, 13:43  (MSK)
man 3 recv для (SCO UnixWare 7.1.1):

...socket is a socket file descriptor that has been created using socket. recv, recvfrom, and recvmsg are used to receive messages from another socket. recv may be used only on a connected
-------------------------^^^^
socket see connect(3sock)), while recvfrom and recvmsg may be used to receive data on a socket whether it is in a connected state or not. recvfrom is commonly used with connectionless sockets because it аllows the source address to be extracted from received data.

Вот так во всяком случае сказано в SCO. Никаких recv без connect. Установи соединение, и работай. Хочешь без соединения - работай через SOCK_DGRAM и recvfrom.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: обратный адрес пакета"
Сообщение от Cheshir emailИскать по авторуВ закладки on 27-Июл-01, 15:17  (MSK)
Васа, слушай, да ты ЗВЕРР :) А как ты ловишь соединения??? Делись опытом :) а то я ламерр, но учиться хочу :) А recvmsg помогает? Или нет? ведь там же в msghdr закидывается, вроде, адрес отправителя?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "RE: обратный адрес пакета"
Сообщение от vasa Искать по авторуВ закладки on 28-Июл-01, 02:27  (MSK)
[font size="1" color="#FF0000"]Последняя редакция от 28-Июл-01 02:41  ()[/font][p]>Васа, слушай, да ты ЗВЕРР :)
>А как ты ловишь соединения???
>Делись опытом :) а то
>я ламерр, но учиться хочу

Это в QNX6. Как в других операционках -- не знаю.

В Linux & Net/Free-BSD -- возможно -- divert сокеты или BPF.
В общем -- побитые пакеты :(
Но это только догадки -- я тут далеко не спец.
Может, кто другой знает.

>:) А recvmsg помогает? Или
>нет? ведь там же в
>msghdr закидывается, вроде, адрес отправителя?
Должно, но не хочется пользоваться дополнительными функциями i/o. Тем более, что это работает только с RAW socket-ами (в QNX по кр.мере). Тогда вообще придется прослушивать весь трафик на RAW уровне - тогда, конечно можно без труда достать этот адрес -- но много лишних телодвижений...
В общем -- насколько я понимаю, в чистом пакете есть обратный адрес -- значит его можно получить без всяких таких трудоемких вывертов (тем более что все это занимает процессорное время, а это нужно не для игрушек). Я предполагал, что существует какой-н. код для ioctl()-вызова...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "RE: обратный адрес пакета"
Сообщение от tcp Искать по авторуВ закладки on 29-Июл-01, 09:48  (MSK)
В самом TCP пакете есть обратный адрес это 32 бита с начиная с 95-ого (отсчет с 0 бита), его наверное просто нужно извлеч от туда.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "RE: обратный адрес пакета"
Сообщение от vasa emailИскать по авторуВ закладки on 30-Июл-01, 06:56  (MSK)
И как же его узнать, если ты открыл UDP socket и получил этот пакет ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 30-Июл-01, 14:47  (MSK)
Наверное имелся ввиду не TCP, а IP, который является транспортом для TCP и UDP.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "RE: обратный адрес пакета"
Сообщение от _nick_ Искать по авторуВ закладки on 15-Авг-01, 00:00  (MSK)
Че то я не понял как ты все делаешь, но если ты читаешь из сети _кадры_ (пакеты), и сеть ethernet стандарта 802, то физический адрес назначения первые 6 октетов, следющие 6 -- адрес источника.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 15-Авг-01, 02:44  (MSK)
Тут речь зашла о TCP и UDP. Затем об IP. Но все они находятся выше раскадровки по модели OSI. Так что, народ читает из сети не кадры, а уже собранные пакеты. В частности, относящиеся к семейсву IP. А вот IP собирается из кадров. Если я правильно помню, то модель OSI делится на такие уровни:
физический, канальный, транспортный, сеансовый, сетевой, уровень согласования и прикладной.
Так вот протоколы TCP и UDP относятся к сетевому уровню (или сеансовому - точно не помню), протокол IP - к транспортному, а кадры - к канальному. То есть, физический адрес карты ты вообще не знаешь - он до тебя просто не доходит.
Ты можешь его видеть только на уровне сокета PF_PACKET, а не PF_INET.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "RE: обратный адрес пакета"
Сообщение от _nick_ Искать по авторуВ закладки on 15-Авг-01, 08:18  (MSK)
>Тут речь зашла о TCP и
>UDP. Затем об IP. Но
>все они находятся выше раскадровки
>по модели OSI. Так что,
>народ читает из сети не
>кадры, а уже собранные пакеты.
>В частности, относящиеся к семейсву
>IP. А вот IP собирается
>из кадров. Если я правильно
>помню, то модель OSI делится
>на такие уровни:
>физический, канальный, транспортный, сеансовый, сетевой, уровень
>согласования и прикладной.
>Так вот протоколы TCP и UDP
>относятся к сетевому уровню (или
>сеансовому - точно не помню),
>протокол IP - к транспортному,
>а кадры - к канальному.
>То есть, физический адрес карты
>ты вообще не знаешь -
>он до тебя просто не
>доходит.
>Ты можешь его видеть только на
>уровне сокета PF_PACKET, а не
>PF_INET.


Vasa, ты с какого уровня достаешь пакеты?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 15-Авг-01, 12:34  (MSK)
О порядке уровней и их функциях ты немного неправ.

Модель OSI:
1. Физический
2. Канальный
3. Сетевой
4. Транспортный
5. Сеансовый
6. Презентационный
7. Прикладной

Протокол ip относят к "Сетевому уровню", tcp и udp к "Транспортному уровню"

Вообще я программированием для сетей особенно не занимался, но надо смотреть заголовок IP.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 15-Авг-01, 18:48  (MSK)
Вполне возможно - давно это было :))
Для получения адреса с уровня TCP/UDP нужно просто доку почитать :))

А кстати, в какой уровень впихивается ICMP ? По идее, он относится к семейству IP, но находится ниже TCP/UDP. В смысле, ближе к физике :))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

26. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 03-Сен-01, 14:31  (MSK)
>Вполне возможно - давно это было
>:))
>Для получения адреса с уровня TCP/UDP
>нужно просто доку почитать :))

))))))))))
>
>
>А кстати, в какой уровень впихивается
>ICMP ? По идее, он
>относится к семейству IP, но
>находится ниже TCP/UDP. В смысле,
>ближе к физике :))

ICMP, находится на том же уровне, что и IP, сетевом.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

28. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 03-Сен-01, 17:53  (MSK)
Да ? Так что же, получается, на одном уровне находятся 2 одинаковых протокола ? Ведь ICMP входит в семейство IP.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

29. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 03-Сен-01, 19:01  (MSK)
>Да ? Так что же, получается, на одном уровне
>находятся 2 одинаковых протокола ? Ведь ICMP
>входит в семейство IP

Почти так. Тут вот в чем дело, есть различия в иерархиях TCP/IP и OSI.

OSI -------------------------> TCP/IP
1. физический и
2. канальный -------------> Network (сетевой)
3. сетевой -----------------> Internetwork (межсетевой)
4. транспортный --------> Transmission (транспортный)
5...

IP и ICMP находятся на уровне Internetwork по классификации TCP/IP и на Сетевом уровне классификации OSI.

Уровень, один но функции у них разные :))

ICMP попадает на этот уровень УСЛОВНО т.к. явно не является транспортным протоколом (точно лежит ниже), но это и не физический/канальный уровень (лежит выше). Как раз попадает под сетевой/межсетевой :))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

30. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 04-Сен-01, 03:51  (MSK)
Ясно.
Поделись урлом откуда инфу можно взять :))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

31. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 04-Сен-01, 16:02  (MSK)
>Ясно.
>Поделись урлом откуда инфу можно взять
>:))

Урл не знаю. Это я из головы вспомнил:))) скорее всего здесь на opennet.ru должно что то должно быть.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

23. "RE: обратный адрес пакета"
Сообщение от Vinny Искать по авторуВ закладки on 16-Авг-01, 15:24  (MSK)
> как узнать обратный адрес пакета,
>
> полученного с помощью recv() или
>read() ?
> (recvfrom не предлагать :)
>Спасибо!
>PS Извините за глупый вопрос :)
>


Ну развели здесь, OSI/ISO, raw, datalink... :) Кто сказал, что connect нельзя применять к udp-сокетам? Оччень даже можно, причем, в отличие от tcp, не только к клиентским, но и к серверным! При этом, конечно, никакого 3-way handshake инициализировано не будет, ибо в udp такого вообще нет. Просто при этом сокет будет получать только датаграммы с того удалённого сокета, к коему он "приконнекчен". Так вот мораль: recvfrom можно юзать с неприконнекченными udp-сокетами, а recv - только с приконнекченными, для которых адрес удалённой стороны был задан при системном вызове connect.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

24. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 17-Авг-01, 14:46  (MSK)
Ну, дык! Наконец здравый человек нашелся!!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

25. "RE: обратный адрес пакета"
Сообщение от XMan Искать по авторуВ закладки on 18-Авг-01, 04:11  (MSK)
Хех. А я думал, что народ пытается выяснить адрес удаленной машины, от которой получены данные. И при этом даже не подозревают, что он хранится в структуре sockaddr_in, которая заполняется в программе для вызова connect и sendto, или заполняется функциями accept и recvfrom при получении данных :))
Остается только посмотреть в переменную sockaddr_in.sin_addr.s_addr :))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

27. "RE: обратный адрес пакета"
Сообщение от mezantrop Искать по авторуВ закладки on 03-Сен-01, 14:34  (MSK)
:)))))))))))))))))))))
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру