24,854
社区成员
发帖
与我相关
我的任务
分享
void
got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
static int count = 1; /* packet counter */
/* declare pointers to packet headers */
const struct sniff_ethernet *ethernet; /* The ethernet header [1] */
const struct sniff_ip *ip; /* The IP header */
const struct sniff_tcp *tcp; /* The TCP header */
const struct sniff_udp *udp; /* The UDP header */
const char *payload; /* Packet payload */
int size_ip;
int size_tcp;
int size_udp = 8;
int size_payload;
printf("\nPacket number %d:\n", count);
count++;
/* define ethernet header */
ethernet = (struct sniff_ethernet*)(packet);
/* define/compute ip header offset */
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
size_ip = IP_HL(ip)*4;
printf("IP header length:%u bytes\n",size_ip);
if (size_ip < 20) {
printf(" * Invalid IP header length: %u bytes\n", size_ip);
return;
}
/* print source and destination IP addresses */
printf(" From: %s\n", inet_ntoa(ip->ip_src));
printf(" To: %s\n", inet_ntoa(ip->ip_dst));
/* determine protocol */
switch(ip->ip_p) {
case IPPROTO_TCP:
printf(" Protocol: TCP\n");
break;
case IPPROTO_UDP:
printf(" Protocol: UDP\n");
break;
case IPPROTO_ICMP:
printf(" Protocol: ICMP\n");
return;
case IPPROTO_IP:
printf(" Protocol: IP\n");
return;
default:
printf(" Protocol: unknown\n");
return;
}
/*
* OK, this packet is udp.
*/
/* define/compute tcp header offset */
udp = (struct sniff_udp*)(packet + SIZE_ETHERNET + size_ip);
if (size_udp < 8) {
printf(" * Invalid udp header length: %u bytes\n", size_tcp);
return;
}
printf(" Src port: %d\n", ntohs(udp->uh_sport));
printf(" Dst port: %d\n", ntohs(udp->uh_dport));
/* define/compute udp payload (segment) offset */
payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_udp);
/* compute udp payload (segment) size */
size_payload = ntohs(ip->ip_len) - (size_ip + size_udp);
int seclen;
seclen= ntohs(ip->ip_len)+16;
//char *data = new char[seclen];
char *data = (char *)malloc(seclen*sizeof(char));
data[0] = (char)0x3E;
data[1] = (char)0xB | (char)((seclen-3)>>8);
data[2] = (char)(seclen-3);
data[3] = (char)0x70;
data[4] = (char)0x25;
data[5] = (char)0xB1;
data[6] = (char)0x00;
data[7] = (char)0x00;
data[8] = (char)0x40;
data[9] = (char)0x5E;
data[10] = (char)0x00;
data[11] = (char)0x01;
memcpy(data+12,*packet,ntohs(ip->ip_len));
//for(int i=0;i<s)
printf("%s\n",data);
return;
}
/* define/compute udp payload (segment) offset */
payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_udp);
/* compute udp payload (segment) size */
size_payload = ntohs(ip->ip_len) - (size_ip + size_udp);
int seclen;
seclen= ntohs(ip->ip_len)+16;
//char *data = new char[seclen];
char *data = (char *)malloc(seclen*sizeof(char));
data[0] = (char)0x3E;
data[1] = (char)0xB | (char)((seclen-3)>>8);
data[2] = (char)(seclen-3);
data[3] = (char)0x70;
data[4] = (char)0x25;
data[5] = (char)0xB1;
data[6] = (char)0x00;
data[7] = (char)0x00;
data[8] = (char)0x40;
data[9] = (char)0x5E;
data[10] = (char)0x00;
data[11] = (char)0x01;
memcpy(data+12,*packet,ntohs(ip->ip_len));
//for(int i=0;i<s)
printf("%s\n",data);
memcpy(data+12,*packet,ntohs(ip->ip_len));
memcpy(data+12, packet, ntohs(ip->ip_len));