Проблема в следующем: udp пакет отправляется но src и dst порты 0ли, длина пакета тоже 0: 22:56:30.648514 IP 192.168.1.12.0 > 192.168.1.1.0: truncated-udplength 0 вот сам код: #include <netinet/udp.h> #include <sys/socket.h> #include <netinet/ip.h> #include <stdio.h> //#define __USE_BSD //#define __FAVOR_BSD unsigned short /* this function generates header checksums */ csum (unsigned short *buf, int nwords) { unsigned long sum; for (sum = 0; nwords > 0; nwords--) sum += *buf++; sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); return ~sum; } int main() { struct ip *myip; struct udphdr *myudp; struct sockaddr_in sin; char payload[4096]; myip=(struct ip *)payload; myudp=(struct udphdr *)payload+sizeof(struct ip); sin.sin_family=AF_INET; sin.sin_port = htons(22); sin.sin_addr.s_addr = inet_addr("192.168.1.1"); memset(payload, 0, 4096); myip->ip_hl=5; myip->ip_v=4; myip->ip_tos=0; myip->ip_len=sizeof(struct ip)+sizeof(struct udphdr); myip->ip_id=htonl(6666); myip->ip_off=0; myip->ip_ttl=255; myip->ip_p=17; myip->ip_sum=0; myip->ip_src.s_addr=inet_addr("192.168.1.12"); myip->ip_dst.s_addr=sin.sin_addr.s_addr;; myudp->uh_sport=htons(47777); myudp->uh_dport=htons(22); myudp->uh_ulen=htons(sizeof(struct udphdr)+sizeof(payload)); myudp->uh_sum=0; myip->ip_sum = csum((unsigned short *)payload, myip->ip_len >> 1); int s = socket (AF_INET, SOCK_RAW, IPPROTO_RAW); int one = 1; const int *val = &one; setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)); sendto(s,payload,myip->ip_len,0,(struct sockaddr *)&sin, sizeof(sin)); }
Ответ на:
комментарий
от mky
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Сокеты. (2004)
- Форум трассировка icmp (2016)
- Форум Почему не читаются пакеты из raw socket? (2023)
- Форум Таймаут для connect() (2009)
- Форум BROADCAST sendto вызывает Permission denied (2004)
- Форум Не понимаю почему не работает (2013)
- Форум socket error (2009)
- Форум Долго отрабатывает программа (2018)
- Форум Подсчет числа возможных открытых TCP-портов (2011)
- Форум Сокеты передача сообщений между компьютерами. Помогите найти ошибку. (2012)