Tag: raw socket

如何使用RAW套接字嗅探所有ICMP数据包

我正在学习RAW套接字。 在下面的代码中,我试图打印所有ICMP数据包标头信息。 看起来代码中有些错误。 任何人都可以帮助我,我错了。 # include # include # include # include # include # include # include main(){ int sockfd,retval,n; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; char buf[10000]; sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sockfd < 0){ perror("sock:"); exit(1); } clilen = sizeof(struct sockaddr_in); while(1){ printf(" before recvfrom\n"); n=recvfrom(sockfd,buf,10000,0,(struct sockaddr *)&cliaddr,&clilen); printf(" rec'd %d […]

如何使用Linux中的RAW套接字发送802.11管理帧和dataframe

我正在尝试构建一个应用程序,它将使用原始套接字从用户空间发送802.11管理帧和dataframe。 我能够使用sendto()函数发送dataframe,但我也需要发送管理帧,我大部分都被卡住了。 有没有可行的方法呢?

发送ICMP ping

对于ICMP ping请求(echo请求),我是否需要获取目标的MAC地址? 我试图学习如何使用原始套接字在C中实现它,但无法理解如何获取目标的MAC地址。 任何帮助表示赞赏。 谢谢。

C编程TCP校验和

我几天来一直无法为TCP做校验和。 我在互联网上查看了很多来源,但我见过的所有例子都没有向您展示如何进行TCP校验和。 我也查看了RFC文档但仍遇到问题: 下面是我用来生成校验和的代码: unsigned short checksum(unsigned short * buffer, int bytes) { unsigned long sum = 0; unsigned short answer = 0; int i = bytes; while(i>0) { sum+=*buffer; buffer+=1; i-=2; } sum = (sum >> 16) + (sum & htonl(0x0000ffff)); sum += (sum >> 16); return ~sum; } 此function适用于IP校验和。 下面是我为TCP标头制作的结构: struct tcp_header { […]