📄 receive.c~
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>//#include <linux/in.h>#include <linux/if_ether.h>#include <netinet/ip.h>#include <netinet/tcp.h>#define SERVER_IP "192.168.0.106"#define PWORD(addr) \ ((unsigned char *)&addr)[0],\ ((unsigned char *)&addr)[1]int main(int argc,char **argv){int sock,n;char buffer[2048];unsigned char *iphead,*ethhead,*tcphead,*datahead;struct ip *ip;struct tcphdr * tcp;char *ptr1,*ptr2;struct sockaddr_in serv_addr;int addr_len =sizeof(struct sockaddr_in);serv_addr.sin_addr.s_addr = inet_addr(SERVER_IP);//serv_addr.sin_addr.s_addr = htonl(SERVER_IP); if((sock=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)))<0) //if((sock=socket(PF_INET,SOCK_STREAM,0))<0) { perror("socket"); exit(1); } printf("\n Now analysis the packets !\n"); while(1) { printf("============================================\n"); //n=recvfrom(sock,buffer,2048,0,NULL,NULL); //n=recvfrom(sock,buffer,2048,0,(struct sockaddr *)&serv_addr,(socklen_t *)&addr_len); n=recvfrom(sock,buffer,2048,0,NULL,NULL); printf("%d bytes read : \n",n); if(n<42) { perror("recvfrom():"); printf("Incomplete packet(errorno is %d)\n",errno); close(sock); exit(0); } ethhead=(unsigned char *)buffer; printf("DST MAC address:%02x:%02x:%02x:%02x:%02x:%02x\n",ethhead[0],ethhead[1],ethhead[2],ethhead[3],ethhead[4],ethhead[5]); printf("SOURCE MAC address:%02x:%02x:%02x:%02x:%02x:%02x\n",ethhead[6],ethhead[7],ethhead[8],ethhead[9],ethhead[10],ethhead[11]);/*-----------------IP Head-------------------------*/iphead=(unsigned char *)(buffer+14);// ip=(struct ip *)(buffer+14); if(*iphead==0x45) { ip=(struct ip *)iphead; //printf("Source host %d.%d.%d.%d\n",iphead[12],iphead[13],iphead[14],iphead[15]); //printf("Dest host %d.%d.%d.%d\n",iphead[16],iphead[17],iphead[18],iphead[19]); printf("IP Header IP->ip_v : %d\n",ip->ip_v); printf("IP Header IP->ip_hl : %d\n",ip->ip_hl); printf("IP Header IP->ip_tos : %d\n",ip->ip_tos); printf("IP Header IP->ip_total_len: %d\n",ntohs(ip->ip_len)); printf("IP Header IP->ip_ident : %d\n",ntohs(ip->ip_id)); printf("IP Header IP->ip_offset : %d\n",PWORD(ip->ip_off)); printf("IP Header IP->ip_ttl : %d\n",ip->ip_ttl); printf("IP Header IP->ip_proto : %d\n",ip->ip_p); printf("IP Header IP->ip_checksum : %d\n",PWORD(ip->ip_sum)); printf("IP Header IP->ip_SRC_IP : %s\n",inet_ntoa(ip->ip_src)); printf("IP Header IP->ip_DST_IP : %s\n",inet_ntoa(ip->ip_dst)); }printf("-------------------------------------------\n");/*-----------------TCP Head------------------------*/tcphead=(iphead+20); tcp=(struct tcphdr *)tcphead; printf("TCP Header TCP->sport : %d\n",ntohs(tcp->source)); printf("TCP Header TCP->dport : %d\n",ntohs(tcp->dest)); printf("TCP Header TCP->tcp-seq : %u\n",ntohl(tcp->seq)); printf("TCP Header TCP->tcp-ack : %u\n",ntohl(tcp->ack_seq)); printf("TCP Header TCP->date-offset: %d\n",tcp->doff); printf("TCP Header TCP->tcp-res1 : %d\n",tcp->res1); printf("TCP Header TCP->URG : %d\n",tcp->urg); printf("TCP Header TCP->ACK : %d\n",tcp->ack); printf("TCP Header TCP->PSH : %d\n",tcp->psh); printf("TCP Header TCP->RST : %d\n",tcp->rst); printf("TCP Header TCP->SYN : %d\n",tcp->syn); printf("TCP Header TCP->FIN : %d\n",tcp->fin); printf("TCP Header TCP->tcp-res2 : %d\n",tcp->res2); printf("TCP Header TCP->Window : %d\n",ntohs(tcp->window)); printf("TCP Header TCP->Checksum : %d\n",PWORD(tcp->check)); printf("TCP Header TCP->urp : %d\n",ntohs(tcp->urg_ptr));// printf("Source,Dest ports %d,%d\n",(iphead[20]<<8)+iphead[21],iphead[22]<<8+iphead[23]);// printf("Layer-4 protocol %d\n",iphead[9]);printf("-------------------------------------------\n");/*-----------------Data Parse----------------------*/datahead=(unsigned char *)((int)tcp+(int)(tcp->doff*4));printf("The Packet data buf : %s\n",datahead); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -