资源简介
基于socket的网络编程技术,用到SOCK_RAW的原始套接字类型。里面对简单ICMP协议和IP协议有着很完整的诠释和定义。可以交流zhaquanmin@163.com

代码片段和文件信息
// SOCK_RAW.cpp : Defines the entry point for the console application.
// 在project->setting->Debug中program arguments输入IP地址 测试程序:127.0.0.1
#include
#include
#include
#include “PING.h“
//函数声明
void Ping(LPCSTR pstrHost);
void ReportError(LPCSTR pstrFrom);
int WaitForEchoReply(SOCKET s);
u_short in_cksum(u_short *addrint len);
//ICMP回送请求和应答函数声明
int SendEchoRequest(SOCKETLPSOCKADDR_IN);
DWORD RecvEchoReply(SOCKETLPSOCKADDR_INu_char*);
//主程序
void main(int argcchar **argv)
{
WSADATA wsaData;
WORD wVersionRequested=MAKEWORD(11); //Winsock1.1
int nRet;
//命令行参考检查
if(argc!=2)
{
fprintf(stderr“\nUsage:ping hostname\n“);
return;
}
//初始化Winsock
nRet=WSAStartup(wVersionRequested&wsaData);
if(nRet)
{
fprintf(stderr“\nError initializing Winsock\n“);
}
//Winsock版本检查
if(wsaData.wVersion!=wVersionRequested)
{
fprintf(stderr“\nWinsock version not supported\n“);
return;
}
//调用Ping函数
Ping(argv[1]);
//释放Winsock
WSACleanup();
}
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//Ping()函数
//调用SendEchoRequest()和RecvEchoReply()函数并输出结果
void Ping(LPCSTR pstrHost)
{
SOCKET rawSocket;
LPHOSTENT lpHost;
struct sockaddr_in saDest;
struct sockaddr_in saSrc;
DWORD dwTimeSent;
DWORD dwElapsed;
u_char cTTL;
int nLoop;
int nRet;
//创建一个原始套接口
rawSocket=socket(AF_INETSOCK_RAWIPPROTO_ICMP);
if(rawSocket==SOCKET_ERROR)
{
ReportError(“socket()“);
return;
}
//根据主机名查询主机地址
// lpHost=gethostbyname(pstrHost);
saDest.sin_addr.s_addr = inet_addr(pstrHost);
//根据主机地址查询主机名
lpHost=gethostbyaddr((char *)&saDest.sin_addr4AF_INET);
if(lpHost==NULL)
{
fprintf(stderr“\nHost not found:%\n“pstrHost);
return;
}
//设置目标套接口地址
saDest.sin_addr.s_addr=*((u_long FAR*)(lpHost->h_addr));
saDest.sin_family=AF_INET;
saDest.sin_port=0;
//输出Ping程序的提示信息例如进行本机Ping时,输出:Pinging localhost [127.0.0.1] with 32 bytes of data:
printf(“\nPinging localhost srvhostname %s to desthostIp %s [$s] with %d bytes of data:\n“
lpHost->h_name
inet_ntoa(saDest.sin_addr)
REQ_DATASIZE);
//控制Ping执行的次数
for(nLoop=0;nLoop<4;nLoop++)
{
//发送ICMP回送请求
SendEchoRequest(rawSocket&saDest);
//使用select()等待接收回送的数据
nRet=WaitForEchoReply(rawSocket);
if(nRet==SOCKET_ERROR)
{
ReportError(“select()“);
break;
}
if(!nRet)
{
printf(“\nTimeOut“); //输出超时提示
break;
}
//接收应答
dwTimeSent=RecvEchoReply(rawSocket&saSrc&cTTL);
//计算传输时间,并输出提示信息。如:Reply from:127.0.0.1:bytes=32time=0ms TTL=128
dwElapsed=GetTickCount()-dwTimeSent;
printf(“\nReply from: %s: bytes=%d time=%ldms TTL=%d“
inet_ntoa(saSrc.sin_addr)
REQ_DATASIZE
dwElapsed
cTTL);
}
pri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 155742 2009-08-10 17:19 ping\Debug\ping.exe
文件 177612 2009-08-10 17:19 ping\Debug\ping.ilk
文件 20888 2009-08-10 17:19 ping\Debug\ping.obj
文件 3570220 2009-08-10 17:19 ping\Debug\ping.pch
文件 328704 2009-08-10 17:19 ping\Debug\ping.pdb
文件 140288 2009-08-10 17:19 ping\Debug\vc60.idb
文件 77824 2009-08-10 17:19 ping\Debug\vc60.pdb
目录 0 2009-08-10 17:19 ping\Debug
文件 5639 2009-07-30 21:21 ping\ping.cpp
文件 3416 2009-08-10 17:18 ping\ping.dsp
文件 533 2009-08-10 17:18 ping\ping.dsw
文件 1509 2009-07-30 22:27 ping\PING.H
文件 41984 2009-08-10 17:19 ping\ping.ncb
文件 53760 2009-08-10 17:19 ping\ping.opt
文件 1163 2009-08-10 17:19 ping\ping.plg
文件 1220 2008-01-14 20:53 ping\ReadMe.txt
文件 295 2008-01-14 20:53 ping\StdAfx.cpp
文件 769 2008-01-14 20:53 ping\StdAfx.h
目录 0 2009-08-10 17:19 ping
----------- --------- ---------- ----- ----
4581566 19
相关资源
- 通信软件的具体实例──基于Socket的
- 用Socket编程实现FTP
- delphi 通过Ping命令检测网络是否正常
- websocket实现一对一聊天
- 代码客:G-TcpServer(IOCP) 1.0 正式版及
- SOCKET 网络编程 计算机网络 作业 客户
- ping 程序 C语言
- linux 网络实验 ftp程序
- 用Socket写的简易FTP服务器和客户端
- socket小工具(可方便建立TCP UDP的soc
- socket客户端源码
- 基于CSocket的多人聊天室
- socket文件传输源码
- window ping命令加时间并记录日志
- Socket自制系统
- HP用SOCKET实现(客户端---服务端)
- Exact Conditions of Blow-up and Global Existen
- Orientation-resolved 3d5/2 energy shift of Rh
- Photoluminescence and photoabsorbance blue shi
- Coordination-resolved 4f binding energy shift
- API实现ping测试源码通信测试_API测试源
- zeromq的windows版本安装包
- STM32分别以串口硬件SPI模拟并口驱动
- Co-doping effect on the martensitic transforma
- 自动获取本机网关并自动ping网管的
- 赤裸裸的统计学_Naked_Statistics_Strippi
- Shopping+在线购物商城的实现Spring+Spr
- 《TCP/IP:协议分析与应用编程》课后
- linux下基于socket和curses的双人弹球游戏
- 计算机网络socket编程实验
评论
共有 条评论