Monday, 20 August 2012
Build A Sample Custom Packet [Embedded Systems]
This code snippet was my submission for embedded systems assignment from the embedded system black book by Dr. K.V.K.K. Prasad. It is in no way a real packet and is not meant to represent the IP layer.
Question: Write a C program that takes the filename as input and generates packets of 100 bytes. Develop a simple packet format of your own.
Compilation:
Question: Write a C program that takes the filename as input and generates packets of 100 bytes. Develop a simple packet format of your own.
Compilation:
gcc -Wall -lm -o custom_packet custom_packet.c
//custom_packet.c // //eg: ./custom_packet /home/samar/Desktop/cs_rules.txt //Compilation: gcc -Wall -lm -o custom_packet custom_packet.c //Custom Packet: Header -> 20 bytes and Data -> 80 bytes //Find me on http://www.techgaun.com #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> typedef struct { int8_t fragment_offset; int8_t ttl; int32_t source_ip; int32_t dest_ip; } custom_packet_header; typedef struct { custom_packet_header header; char data[80]; } custom_packet; long int get_file_size(char fname[]) { int fd; int count; if ((fd = open(fname, O_RDONLY)) == -1) { perror("Error reading the file\n"); exit(EXIT_FAILURE); } struct stat buf; fstat(fd, &buf); count = buf.st_size; close(fd); return count; } int decimalip2numeric(int a, int b, int c, int d) { return (a * 16777216 + b * 65536 + c * 256 + d); } /*char * numericip2decimal(int num) { char strs[4]; strs[0] = (char *) num / 1677; }*/ int main(int argc, char **argv) { FILE *fp; //char fname[256]; //255 bytes is the limit of filename in extN filesystems custom_packet * packets; long int fsize; int num_of_packet, i; if (argc != 2) { printf("Usage: %s filename\n", argv[0]); exit(1); } fsize = get_file_size(argv[1]); num_of_packet = ceil((double)fsize / 80.0); printf("%ld => %d",fsize, num_of_packet); if ((fp = fopen(argv[1], "rb")) == NULL) { perror("Error opening the file"); exit(1); } packets = (custom_packet *) malloc(sizeof(custom_packet) * num_of_packet); for (i = 0; i < num_of_packet; i++) { packets[i].header.source_ip = decimalip2numeric(127, 0, 0, 1); //storing source ip as 127.0.0.1 for now packets[i].header.dest_ip = decimalip2numeric(127, 0, 0, 1); //storing dest ip as 127.0.0.1 for now packets[i].header.ttl = 127; packets[i].header.fragment_offset = i; } i = 0; while (!feof(fp)) { fread((void *)packets[i].data, 80, 1, fp); i++; } fclose(fp); printf("\n\n----- Printing all the crafted packets -----\n\n"); for (i = 0; i < num_of_packet; i++) { printf("[---- Packet Fragment no. %d ----", packets[i].header.fragment_offset); printf("\nSource IP -> %d\nDestination IP -> %d\nTime to live -> %d\n", packets[i].header.source_ip, packets[i].header.dest_ip, packets[i].header.ttl); printf("Packet data -> %s", packets[i].data); printf("\n---- End of Packet no. %d ----]\n\n", packets[i].header.fragment_offset); } return 0; }
Labels:
C/C++,
internet protocol,
programming
Bookmark this post:blogger tutorials
Social Bookmarking Blogger Widget |
Build A Sample Custom Packet [Embedded Systems]
2012-08-20T11:06:00+05:45
Cool Samar
C/C++|internet protocol|programming|
Subscribe to:
Post Comments (Atom)