社区
网络及通讯开发
帖子详情
请教原始IP套接口编程!
moncat
2003-09-16 02:14:29
本人尝试用原始IP套接口在windows下写程序,但是总是不能正常运行
做嗅探器又做不了,无法接收;做自己构造IP包,又发送出现10049错误,不知怎么回事,请这方面的高手指点,有现成的例子最好!谢谢,我已经搞了很久了,都没搞成
...全文
31
26
打赏
收藏
请教原始IP套接口编程!
本人尝试用原始IP套接口在windows下写程序,但是总是不能正常运行 做嗅探器又做不了,无法接收;做自己构造IP包,又发送出现10049错误,不知怎么回事,请这方面的高手指点,有现成的例子最好!谢谢,我已经搞了很久了,都没搞成
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
net205
2003-09-23
打赏
举报
回复
我要学习
kxbkxb2000@163.com
ljlln
2003-09-23
打赏
举报
回复
学习中...
望:netsys2(来电)能给一份!谢谢
mylnemail@163.com
hantao
2003-09-23
打赏
举报
回复
学习
moncat
2003-09-23
打赏
举报
回复
怎么就没人回答了呀?
快帮帮忙啊,他老是出现发送错误(10049)
COKING
2003-09-22
打赏
举报
回复
呵呵。。。
moncat
2003-09-22
打赏
举报
回复
to COKING(疯间猖越) :
不会吧?
UDP的校验和是用伪首部的啊,源目IP地址+UDP+数据
IP的校验和是不含数据的
你还是去查下tcp/ip协议吧
COKING
2003-09-22
打赏
举报
回复
你两个CheckSum是错的!
UDP的CheckSum是:UDP头+数据
IP的CheckSum是: IP头 + UDP头+ 数据
moncat
2003-09-22
打赏
举报
回复
大哥,我的IP包里面的是UDP包啊,当然要指示UDP啦,要不接收端系统如何解析我的数据包内容啊?
kingcaiyao
2003-09-20
打赏
举报
回复
//构造IP首部
memset(&iph,0,sizeof(IPHeader));
iph.h_lenver = (4<<4)|sizeof(IPHeader)/sizeof(unsigned long);
iph.total_len = htons(pkgsize);
iph.ttl = 128;
iph.proto = IPPROTO_UDP;//这里既然是构造IP首部,为何要用的是UDP协议啊?
iph.checksum = 0;
iph.sourceIP = inet_addr("192.168.0.1");
iph.destIP = inet_addr("192.168.0.1");
iph.checksum = CheckSum((unsigned short*)&iph,sizeof(IPHeader));
netsys2
2003-09-19
打赏
举报
回复
都发了,查收
moncat
2003-09-19
打赏
举报
回复
嗅探器已经解决了,自组IP包的还不行,总是出现错误
moncat
2003-09-19
打赏
举报
回复
to netsys2(来电):
谢谢你,我的电子邮箱:liu_fq@163.com 或 liu_fq@mail.china.com
moncat
2003-09-19
打赏
举报
回复
不好意思,第一次发的上面的 //构造TCP首部 改为 //构造IP首部
moncat
2003-09-19
打赏
举报
回复
to: netsys2(来电),谢谢了,但是就是不行,发送老是出现10049错误
我写的源代码贴出来给大家看看,麻烦检查一下:
int main(int argc, char* argv[])
{
char SendBuf[512] = {0};
WSADATA wsaData;
SOCKET SockRaw;
sockaddr_in addr;
if(WSAStartup(MAKEWORD(2,1),&wsaData))
{
printf("WSAStartup() error: %d\n",WSAGetLastError());
return -1;
}
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.0.1");
addr.sin_port = htons(9000);
SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);
if(SockRaw==INVALID_SOCKET)
{
printf("socket() error: %d\n",WSAGetLastError());
return -1;
}
int bOpt = 1;
if(setsockopt(SockRaw, IPPROTO_IP, IP_HDRINCL,(char*) &bOpt, sizeof(int))==SOCKET_ERROR)
{
printf("setsockopt() error: %d\n",WSAGetLastError());
return -1;
}
////////////////////////////////////////
IPHeader iph;
UDPHeader udph;
PSD_UDPHeader *pudph = (PSD_UDPHeader *)SendBuf;
char *p;
char msg[]="这是一个测试包";
unsigned short udpsize,pudpsize,pkgsize;
udpsize = sizeof(UDPHeader) + strlen(msg);
pkgsize = sizeof(IPHeader) + udpsize;
//构造IP首部
memset(&iph,0,sizeof(IPHeader));
iph.h_lenver = (4<<4)|sizeof(IPHeader)/sizeof(unsigned long);
iph.total_len = htons(pkgsize);
iph.ttl = 128;
iph.proto = IPPROTO_UDP;
iph.checksum = 0;
iph.sourceIP = inet_addr("192.168.0.1");
iph.destIP = inet_addr("192.168.0.1");
iph.checksum = CheckSum((unsigned short*)&iph,sizeof(IPHeader));
//构造UDP首部
memset(&udph,0,sizeof(UDPHeader));
udph.uh_sport = htons(9000);
udph.uh_dport = htons(9000);
udph.uh_len = htons(udpsize);
udph.uh_sum = 0;
//构造udp伪首部
pudpsize = 0;
p = (char*)pudph->udpdata;
pudph->saddr = inet_addr("192.168.0.1");
pudph->daddr = inet_addr("192.168.0.1");
pudph->mbz = 0;
pudph->protocol = IPPROTO_UDP;
pudph->udplen = htons(udpsize);
pudph->udph = udph;
pudpsize = p - SendBuf ;
strcpy(pudph->udpdata,msg);
pudpsize += strlen(msg);
//计算UDP检验和
memset(SendBuf,0,512);
udph.uh_sum = CheckSum((unsigned short*)SendBuf,pudpsize);
//填充发送缓冲区
memset(SendBuf,0,512);
pkgsize = 0;
memcpy(SendBuf,&iph,sizeof(iph));
pkgsize += sizeof(iph);
memcpy(SendBuf+pkgsize,&udph,sizeof(udph));
pkgsize += sizeof(udph);
memcpy(SendBuf+pkgsize,msg,strlen(msg));
pkgsize += strlen(msg);
///////////////////////////////////////
if(sendto(SockRaw,SendBuf,pkgsize,0,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
{
printf("sendto() error: %d\n",WSAGetLastError());
return -1;
}
closesocket(SockRaw);
WSACleanup();
return 0;
}
moncat
2003-09-19
打赏
举报
回复
to: netsys2(来电),谢谢了,但是就是不行,发送老是出现10049错误
我写的源代码贴出来给大家看看,麻烦检查一下:
int main(int argc, char* argv[])
{
char SendBuf[512] = {0};
WSADATA wsaData;
SOCKET SockRaw;
sockaddr_in addr;
if(WSAStartup(MAKEWORD(2,1),&wsaData))
{
printf("WSAStartup() error: %d\n",WSAGetLastError());
return -1;
}
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.0.1");
addr.sin_port = htons(9000);
SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);
if(SockRaw==INVALID_SOCKET)
{
printf("socket() error: %d\n",WSAGetLastError());
return -1;
}
int bOpt = 1;
if(setsockopt(SockRaw, IPPROTO_IP, IP_HDRINCL,(char*) &bOpt, sizeof(int))==SOCKET_ERROR)
{
printf("setsockopt() error: %d\n",WSAGetLastError());
return -1;
}
////////////////////////////////////////
IPHeader iph;
UDPHeader udph;
PSD_UDPHeader *pudph = (PSD_UDPHeader *)SendBuf;
char *p;
char msg[]="这是一个测试包";
unsigned short udpsize,pudpsize,pkgsize;
udpsize = sizeof(UDPHeader) + strlen(msg);
pkgsize = sizeof(IPHeader) + udpsize;
//构造TCP首部
memset(&iph,0,sizeof(IPHeader));
iph.h_lenver = (4<<4)|sizeof(IPHeader)/sizeof(unsigned long);
iph.total_len = htons(pkgsize);
iph.ttl = 128;
iph.proto = IPPROTO_UDP;
iph.checksum = 0;
iph.sourceIP = inet_addr("192.168.0.1");
iph.destIP = inet_addr("192.168.0.1");
iph.checksum = CheckSum((unsigned short*)&iph,sizeof(IPHeader));
//构造UDP首部
memset(&udph,0,sizeof(UDPHeader));
udph.uh_sport = htons(9000);
udph.uh_dport = htons(9000);
udph.uh_len = htons(udpsize);
udph.uh_sum = 0;
//构造udp伪首部
pudpsize = 0;
p = (char*)pudph->udpdata;
pudph->saddr = inet_addr("192.168.0.1");
pudph->daddr = inet_addr("192.168.0.1");
pudph->mbz = 0;
pudph->protocol = IPPROTO_UDP;
pudph->udplen = htons(udpsize);
pudph->udph = udph;
pudpsize = p - SendBuf ;
strcpy(pudph->udpdata,msg);
pudpsize += strlen(msg);
//计算UDP检验和
memset(SendBuf,0,512);
udph.uh_sum = CheckSum((unsigned short*)SendBuf,pudpsize);
//填充发送缓冲区
memset(SendBuf,0,512);
pkgsize = 0;
memcpy(SendBuf,&iph,sizeof(iph));
pkgsize += sizeof(iph);
memcpy(SendBuf+pkgsize,&udph,sizeof(udph));
pkgsize += sizeof(udph);
memcpy(SendBuf+pkgsize,msg,strlen(msg));
pkgsize += strlen(msg);
///////////////////////////////////////
if(sendto(SockRaw,SendBuf,pkgsize,0,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
{
printf("sendto() error: %d\n",WSAGetLastError());
return -1;
}
closesocket(SockRaw);
WSACleanup();
return 0;
}
ysyzqm-zqm
2003-09-19
打赏
举报
回复
我也要:(
zqm@mail.cc163.com
netsys2
2003-09-18
打赏
举报
回复
楼主还没有留妹,再等2天
netsys2
2003-09-18
打赏
举报
回复
楼主还没有留妹,再等2天
tanbi52
2003-09-18
打赏
举报
回复
代理服务哭没有设置好
newcoco800927
2003-09-18
打赏
举报
回复
netsys2(来电):
我也要,my mail: Coer_New@Dlink.com.cn
加载更多回复(6)
IP
v6
套
接字
编程
介绍
IP
v6
套
接字
编程
1.概述 由于互联网用户的日益增加,网络需求日益扩大,
IP
v4地址也日益紧张。人们为了解决地址日趋耗尽的问题,采用了CIDR、NAT等技术来延缓地址耗尽的速度,但这并不能从根本上解决
IP
v4目前存在的问题,
IP
v4地址耗尽只是一个时间问题。随着互联网的发展,Internet骨干路由器的路由表也日益扩大,这使得路由器必须维护大量路由表。 由于
IP
v6可以解决传统的
IP
技术的
原始
数据包的分析
学习NDIS一段时间了,不过还是毫无头绪,理论都能明白,可是不知道怎么下手去做,网上没有没有太详细的教程。我是比较笨,而且比较懒的。:) 所以准备暂缓NDIS网络和驱动方面的学习,等今后遇见师父了再
请教
之,好运~ NDIS中的网络数据都是
原始
的,即没有经过主机协议栈处理的网络数据,如果学习网络协议的话,我觉得研究
原始
数据包还是挺合适的。 Socket通信中,主机A与主机...
TCP
IP
完整的一
套
基础介绍
TCP/
IP
应该是个协议集,根据OS的七层理论,TCP/
IP
分为四层.分别是应用,传输,Interne和网络界面. 我们一般说TCP在传输层,而
IP
在Internet层. TCP/
IP
的应用程序包括我们平时经常用到的Ping,Telnet,FTP,Finger等等 配置TCP/
IP
包括
IP
地址,子网掩码和缺省网关 正确检测TC
大牛们的C语言
编程
建议和技巧!
点击上方“大鱼机器人”,选择“置顶/星标公众号”福利干货,第一时间送达!我们鼓励在
编程
时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随...
各路大牛的C语言
编程
建议和技巧!
我们鼓励在
编程
时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以来这些基于许多经验的观点一直积累在我的头脑中。因此希望这些观点能帮助你们,了解如何规划一个程序的细节。(我还没有看到过一篇讲关于如何规划整个事情的好文章,不过这部分可以是课程的一部分)要是能发现它们的特质,那很好;要是不认...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章