Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > не дошол udp пакет


Автор: s0k0l 28.8.2007, 09:20
Код

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

struct UdpHead
{
 u_short src_port;
 u_short targ_port;
 u_short length;
 u_short checksum;
};

char message[]="TEST";
char msgbuf[1024];

int main()
{
 int sock;
 struct sockaddr_in addr;
 struct UdpHead udphead;
 char *ip="192.168.25.25";

 
if(sock=socket(AF_INET,SOCK_RAW,IPPROTO_UDP)<0) printf("error sock");

addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(*ip);

udphead.targ_port=htons(139);
udphead.length=htons(sizeof(udphead)+sizeof(message));
udphead.checksum=0;

memcpy((void *)msgbuf,(void *)&udphead,sizeof(udphead));
memcpy((void *)(msgbuf+sizeof(udphead)),(void *)message,sizeof(message));

sendto(sock,msgbuf,sizeof(udphead)+sizeof(message),0,(struct sockaddr *)&addr,sizeof(addr));


close(sock);

 return 0;
}


Отправляю udp пакет , и ловлю его сниффиром на хосте куда отправил, но увы пакет не дошел.  Думаю трабл в проге , так как все файероволы отключены.

Автор: ptr 28.8.2007, 09:38
Кто будет заполнять порт в addr?
Код

addr.sin_port=htons(139);

Да и ошибки кто проверять будет?

Автор: s0k0l 28.8.2007, 09:58
согласен! но когда добавил , все равно не дошел

Автор: ptr 28.8.2007, 10:21
sendto что вернул?

Автор: s0k0l 28.8.2007, 10:27
-1 , смотрю что в man-е написано 

Автор: ptr 28.8.2007, 10:28
Вместо SOCK_RAW должен быть SOCK_DGRAM.

Автор: s0k0l 28.8.2007, 10:31
вся фишка в том , что я хочу явно задавать udp заголовок , а для этого как читал - нужно raw использовать.

Добавлено через 1 минуту и 18 секунд
Вместо SOCK_RAW должен быть SOCK_DGRAM.   - тоже -1

Добавлено через 2 минуты и 19 секунд
В man есть писание ошибок , но чему соответствует -1?

Автор: ptr 28.8.2007, 10:36
Что в errno?

Цитата(s0k0l @  28.8.2007,  13:31 Найти цитируемый пост)
а для этого как читал - нужно raw использовать.

Ну да. Правда для этого нужно определённые права иметь.

Автор: s0k0l 28.8.2007, 10:40
думаю что root вполне хватит. Сейчас гляну errno

Добавлено через 12 минут и 20 секунд

38 - ENOTSOCK socket operation on non socket

Автор: s0k0l 28.8.2007, 11:19
нашел описание : дескриптор ссылается на файл а не на сокет . Т.е  sock - это не сокет

Автор: ptr 28.8.2007, 11:24
Надо:
Код

if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_UDP))<0)


У "<" приоритет выше чем у "=".

Автор: s0k0l 28.8.2007, 11:30
Точно, как раз заметил что socket= 0

Добавлено через 4 минуты и 17 секунд
спасибо за помощь!!!!!!!!!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)