|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.03.2011, 19:30 | #1 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Не создается RAW-socket.
Сидя под убунтой пытаюсь создать raw-socket:
#include <sys/socket.h> #include <netinet/in.h> int main() { int fd= socket(AF_INET, SOCK_RAW,IPPROTO_ICMP); qDebug()<<fd; } Все компилится, однако ж socket возвращает -1 при выполнении программы. Кто знает почему? |
17.03.2011, 21:22 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
а права какие? под кем запускаете?
|
18.03.2011, 00:29 | #3 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Упс... Обычным пользователем. С sudo заработало.
Тогда странный вопрос. Надо будет всегда запускать прогу от супервизора или можно в коде что-то прописать? |
21.03.2011, 21:49 | #4 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Следующий вопрос серьезней.
Нужно сгенерировать icmp-пакет и отправить его в сеть. Делаем это пять же под linux. Используем структуры ip и icmphdr. Однако программа работать как надо не желает. Ошибок не выдает. Почему ж так? Код:
Не знаю как правильно запихнуть заголовки и информацию в сокет. Косяк в этом. Как правильно кинуть в char* две структуры и данные? Последний раз редактировалось Silver_Swift; 21.03.2011 в 21:59. |
23.03.2011, 01:08 | #5 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Однако одиноко как-то мне тут... Но предпримем еще одну попытку обращения к сообществу.
С отправкой разобрался все работает. Теперь затык в том, чтобы принимать пакеты на другой машине. Программа: Код:
|
23.03.2011, 04:29 | #6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
может поставить IPPROTO_ICMP вместо IPPROTO_TCP?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
23.03.2011, 07:38 | #7 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Само собой. Так и было, TCP остался после экспериментов. Дело не в этом пакеты все равно не идут.
Может ось какие-то пакеты отфильтровывает и надо какую-то опцию включить? edited: И кстати со строкой sockfd=socket(PF_INET, SOCK_RAW,IPPROTO_TCP); программа нормально ловит ICMP пакеты и читает IP заголовок, а дальше косячит. Почему? Последний раз редактировалось Silver_Swift; 23.03.2011 в 08:16. |
23.03.2011, 11:40 | #8 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> Ловит UDP и TCP пакеты на ура. А ICMP не видит совсем.
> программа нормально ловит ICMP пакеты и читает IP заголовок как-то одно другому слегка противоречит, не?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
23.03.2011, 17:11 | #9 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Мде... Все описал, код приложил, а конструктива нуль...
Если при создании сокета выбрать протокол ICMP, то сообщения не будут читаться. Если выбрать протокол TCP то программа будет читать пакеты, при чем любые в том числе ICMP. При этом ICMP заголовок и информация искажаются, а IP заголовок читается нормально. Мне казалось извлечение этой мысли из моих постов не должно представлять трудностей. Есть чего по делу сказать? edited: А TCP-пакеты с "собранным вручную" IP заголовком принимаются вообще без проблем... Последний раз редактировалось Silver_Swift; 23.03.2011 в 17:14. |
23.03.2011, 22:02 | #10 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 17
|
Ошибку нашел, все работает, тему можно закрывать.
veniside спасибо за приятную компанию. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TBitmap -> RAW | Celestia | Мультимедиа в Delphi | 5 | 17.01.2011 18:59 |
Raw Socket C++ | GanBit | Помощь студентам | 0 | 21.09.2010 10:01 |
Тонкости программирования RAW SOCKET под Linux | seryoga89 | Общие вопросы C/C++ | 0 | 13.06.2010 16:44 |
Raw сокеты | liljon | Win Api | 1 | 21.05.2010 23:45 |
не создается socket() | isPolin | C/C++ Сетевое программирование | 2 | 24.06.2009 14:41 |