弄了两天,终于搞定了!把最简单的icmp报文发送实现了。本程序在linux环境编写,使用原始套接字。
实现步骤:
1、得到protocol实体(protoent,声明于<netdb.h>);
2、初始化地址结构(sockaddr_in,声明于<netinet/in.h>);
3、创建套接字(socket(),声明于<sys/socket.h>,参数声明于<sys/types.h>);
4、更改socket选项,更改发送缓冲区大小(setsockopt(),声明于<sys/socket.h><sys/types.h>);
5、发送报文(sendto(),声明于<sys/types.h><sys/socket.h>);
6、关闭socket描述符(close(),声明于<unistd.h>);
代码:
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <netinet/ip_icmp.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
typedef unsigned c