`
zhangyafei_kimi
  • 浏览: 261690 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

UDP的ICMP差错的测试程序

阅读更多
/*
作者:张亚霏
2008-12-03早
*/

/*
UDP主机不可达、端口不可达测试
*/

/*
向一个已知主机的打开端口发一个UDP包,无任何异常
*/

/*
向一个已知主机的未打开端口发一个UDP包
主机返回一个ICMP端口不可达报文
结果就是之后的recvfrom返回-1
GetLastError() WSAECONNRESET
or
errno ECONNRESET
*/

/*
向一个未知主机的某端口发一个UDP包
可能无任何回应
也可能是中间路由器返回一个ICMP主机不可达报文,但是这种情况很少见
结果就是之后的recvfrom返回-1
GetLastError() WSAEHOSTUNREACH
or
errno EHOSTUNREACH
*/


#if defined WIN32 || defined _WIN32


#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int init_net()
{
	WSADATA wsa_data;
	return 0 != WSAStartup(MAKEWORD(2,2), &wsa_data);
}

void uninit_net()
{
	WSACleanup();
}

int close_socket(SOCKET s)
{
	return closesocket(s);
}

int get_last_error()
{
	return WSAGetLastError();
}
#else

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>

int init_net()
{
	return 1;
}

void uninit_net()
{
}


typedef int SOCKET;

int close_socket(SOCKET s)
{
	return close(s);
}

int get_last_error()
{
	return errno;
}
#endif



#define BUFFER_SIZE 1024
#define DEST_ADDRESS "127.0.0.1"//"192.168.1.2"
#define DEST_PORT 27015//1037


int main()
{
	
	SOCKET send_socket;
	struct sockaddr_in recv_addr;
	char send_buf[BUFFER_SIZE];
	char recv_buf[BUFFER_SIZE];
	int ret;

	fd_set read_set;
	struct timeval time_out;

	init_net();

	send_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	recv_addr.sin_family = AF_INET;
	recv_addr.sin_port = htons(DEST_PORT);
	recv_addr.sin_addr.s_addr = inet_addr(DEST_ADDRESS);



	ret = sendto(send_socket, 
		send_buf, 
		BUFFER_SIZE, 
		0, 
		(struct sockaddr*) &recv_addr, 
		sizeof(recv_addr));

	FD_ZERO(&read_set);
	FD_SET(send_socket, &read_set);
	time_out.tv_sec = 1;
	time_out.tv_usec = 0;
	
	ret = select(send_socket+1, &read_set, NULL, NULL, &time_out);
	if(ret == 1 && FD_ISSET(send_socket, &read_set))
	{
		ret = recvfrom(send_socket, recv_buf, BUFFER_SIZE, 0, NULL, NULL);
		if(ret == -1)
		{
			printf("get_last_error() %d\n", get_last_error());
			perror(NULL);
		}
	}

	close_socket(send_socket);
	uninit_net();
	return 0;
}
分享到:
评论

相关推荐

    ICMP协议的程序语言实现

    ICMP就是所谓的Internet控制报文协议(Internet Control Message Protocol),在网络中,一般用它来传递差错报文以及其他应注意的信息。ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议...

    C实现UDP端口扫描

    可是由于大部分系统都限制了ICMP 差错报文的产生速度,所以针对特定主机的UDP 大量端口扫描速度缓慢,此外由于UDP 协议和ICMP 协议都是不可靠协议,所以未收到回应可能由于数据包未送达造成,所以扫描程序需要针对...

    icmp.rar_TCP或者UDP_tracert

    ICMP就是所谓的Internet控制报文协议(Internet Control Message Protocol),在网络中,一般用它来传递差错报文以及其他应注意的信息。ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议...

    ICMP.rar_icmp ip linux_命令介绍

    ICMP就是所谓的Internet控制报文协议(Internet Control Message Protocol),在网络中,一般用它来传递差错报文以及其他应注意的信息。ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议...

    202001Internet协议分析实验报告(第2天).docx

    练习三 ICMP差错报文编辑与分析 任务一 差错报文编辑与分析 实验15 路由协议分析 练习一 静态路由配置与路由表分析 任务一 静态路由配置与路由表分析 练习二 动态路由协议RIPv2分析 任务一 动态路由协议RIPv2分析...

    计算机网络技术-UDP协议分析教程

    如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。 2、 UDP的主要特点: 1)、UDP 是无连接的...

    socket UDP.zip_C语言_TCP通信_TP_stream_原始套接字

    套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式。 套接字分为三类; 流式socket(SOCK_STREAM):提供可靠,面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。...

    毕业设计反病毒虚拟机源码-notes:笔记

    毕业设计 反病毒虚拟机源码 tcp 进阶 我们已经介绍了以下几种分组格式: I P、I C M P、I ...P数据报中的哪些部分,以及该检验和是强制的还是可选的 ...就像我们在6.5节所看到的,一个ICMP差错报文必须至

    2019计算机网络与通信A卷初稿.docx

    A.TCP B. UDP C. DNS D. PPP 1.3下面哪种协议可以用于获取主机IP地址? ( ) A. DHCP B. ARP C. ICMP D. DNS 1.4将一个分组从节点推到链路上所需要的时间称为什么时延? ( ). A.传输时延 B. 队列时延 C. ...

    TCP_IP详解卷1

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part04

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part09

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part03

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part05

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part06

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCP-IP详解卷一:协议

    11.6 ICMP不可达差错(需要分片) 11.7 用Traceroute确定路径MTU 11.8 采用UDP的路径MTU发现 11.9 UDP和ARP之间的交互作用 11.10 最大UDP数据报长度 11.11 ICMP源站抑制差错 11.12 UDP服务器的设计 11.12.1 ...

    TCP/IP详解part_2

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part08

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part11

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

    TCPIP详解卷[1].part12

    11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 11.11 ICMP源站抑制差错 120 11.12 UDP...

Global site tag (gtag.js) - Google Analytics