资源简介
基于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
相关资源
- ping命令程序设计
- Linux网络编程-网络基础-socket编程-高并
- 基于DataSocket技术的LabVIEW远程测控.p
- WEB在线聊天系统源码
- Socket编程。ppt
- 第9章 基于C_S结构的Socket程序设计
- 黑马_Linux网络编程-网络基础-socket编程
- 基于HP-Socket的局域网通信工具仿QQ
- 安卓app软件通信cc3200
- Socket的TCP、UDP通讯
- socketdemo193608
- Naked Statistics Stripping the Dread From the
- D3D11 Cube Mapping程序
- 局域网聊天工具socket通信技术
- 聊天 socket通信
- CSocket_Server.zip
- websocket向指定用户发信息
- Spring Boot整合websocket实现群聊,点对点
- socket 编程 tcp 实现文件上传
- power world simulator version 15 including hel
- 苹方字体ttf格式.zip
- Mqtt for Unity 完整工程包
- PingFangSC
- 安全的即时通信软件.zip
- SuperSocket带客户端和服务器端
- Visual Studio 实现TCp socket 异步通信,客
- 一款能统计能存储日志设置超时时间
- VS+CSocket实现网络聊天,可发文件Wor
- 基于vs2010做的tcp通信调试工具源码
- Rapid Prototyping of Digital Systems
评论
共有 条评论