#include <stdio.h>
#include <tchar.h>
#include <Winsock2.h>
#include <ws2tcpip.h>
#pragma comment (lib,"ws2_32.lib")
#pragma pack(push,1)
struct ip_hdr{
u_char h_verlen;
u_char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_offset;
u_char tt1;
u_char proto;
unsigned short checksum;
IN_ADDR src_ip;
IN_ADDR dst_ip;
};
struct icmp_hdr{
u_char icmp_type;
u_char icmp_code;
unsigned short icmp_ckecksum;
unsigned short icmp_id;
unsigned icmp_seq;
};
struct udp_hdr{
unsigned short src_port;
unsigned short dst_port;
unsigned short pkt_len;
unsigned short ckecksum;
};
void tracertByIcmpEcho(IN_ADDR *src_ip,IN_ADDR *dst_ip);
void sent();
//发送数据
void sent(){
printf("目的地址:");
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("we could not find a usable");
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
//创建服务器套接字
SOCKET Svr = socket(AF_INET,SOCK_DGRAM,0);
//创建地址
SOCKADDR_IN addrSvr;
addrSvr.sin_family = AF_INET;
addrSvr.sin_port = htons(6000);
addrSvr.sin_addr.S_un.S_addr = inet_addr("192.168.1.1");
char recvBuf[128];
char sendBuf[128];
int len = sizeof(sockaddr);
while(true)
{
gets(sendBuf);
//发送数据
sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSvr,len);
//接收数据
recvfrom(Svr,recvBuf,128,0,(sockaddr*)&addrSvr,&len);
char* dst_ip = inet_ntoa(addrSvr.sin_addr);
printf("%s said: %s/n",dst_ip,recvBuf);
}
closesocket(Svr);
WSACleanup();
}
//获取主机的ip地址
void CheckIP(void) //定义CheckIP()函数,用于获取本机IP地址
{
printf("源地址:");
WSADATA wsaData;
char name[255];//定义用于存放获得的主机名的变量
char *src_ip;//定义IP地址变量
PHOSTENT hostinfo; //记录主机的信息
//调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) {
//现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续
if( gethostname ( name, sizeof(name)) == 0) {
//如果成功地将本地主机名存放入由name参数指定的缓冲区中
if((hostinfo = gethostbyname(name)) != NULL) {
//这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo
//为PHOSTENT型的变量,下面即将用到这个结构体
src_ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
//调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP
//地址(如192.168.0.1)
printf("%s\n",src_ip);//输出IP地址
}
}
WSACleanup( );//卸载Winsock库,并释放所有资源
}
}
void main()
{
CheckIP();
sent();
}
没有合适的资源?快使用搜索试试~ 我知道了~
arp.rar_类似tracert
共1个文件
cpp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 134 浏览量
2022-09-21
17:49:37
上传
评论
收藏 2KB RAR 举报
温馨提示
通过程序实现类似windows系统类似tracert的功能,可以通过wireshark抓取tracert数据分析 来了解工作原理。基本流程向目标主机发送3个ICMP回显报文,IP报文的ttl值设为1,接收ICMP 差错报告报文,记录从发送出去到接收花费的时间,然后修改ttl值为2,再发3个ICMP报文, 记录接收到的差错报告报文,直到接收到ICMP回显中的应答报文接收,打印数据类似如下 格式:
资源推荐
资源详情
资源评论
收起资源包目录
arp.rar (1个子文件)
arp.cpp 4KB
共 1 条
- 1
资源评论
JonSco
- 粉丝: 89
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于CSS与JavaScript的积分系统设计源码
- 生物化学作业_1_生物化学作业资料.pdf
- 基于libgdx引擎的Java开发连连看游戏设计源码
- 基于MobileNetV3的SSD目标检测算法PyTorch实现设计源码
- 基于Java JDK的全面框架设计源码学习项目
- 基于Python黑魔法原理的Python编程技巧设计源码
- 基于Python的EducationCRM管理系统前端设计源码
- 基于Django4.0+Python3.10的在线学习系统Scss设计源码
- 基于activiti6和jeesite4的dreamFlow工作流管理设计源码
- 基于Python实现的简单植物大战僵尸脚本设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功