tempad
ReadyGo!技术成就梦想 >>数据库技术 >> 谁能给个win 下的例子:见内,up 有分

谁能给个win 下的例子:见内,up 有分

ReadyGo!技术成就梦想 网络搜索 efish 2008-1-13 11:11:56

谁能给个win 下的例子:见内,up 有分

楼主pitchstar(一站)2002-01-04 17:48:29 在 VC/MFC / 基础类 提问

win   下   原始套接字发送   tcp     syn   包的例子,我没写成,想参考一下。。。  
  多谢各位的支持。 问题点数:200、回复次数:36Top

1 楼jianhenk(星橙)回复于 2002-01-04 17:49:52 得分 4

up   up我要分哈,  
  我不会Top

2 楼liujiangsh(飞鹰)回复于 2002-01-04 18:04:23 得分 4

up,up,我也不会Top

3 楼szk(szk)回复于 2002-01-04 18:05:15 得分 20

checksum函数就算了,首先定义几个结构  
  要发送的缓冲区(因为是自定义包,当然tcp包和ip包要自己写了!)  
  struct   packet  
  {  
              struct   _iphdr   ip;  
              struct   _tcphdr   tcp;  
  }packet;  
   
  //伪头,计算tcp的checksum用  
  struct   pseudo_header  
  { /*   For   TCP   header   checksum   */  
  unsigned   int   source_address;  
  unsigned   int   dest_address;  
  unsigned   char   placeholder;  
  unsigned   char   protocol;  
  unsigned   short   tcp_length;  
  struct   _tcphdr   tcp;  
  }pseudo_header;  
   
  typedef   struct   _tcphdr          
  {  
  USHORT   th_sport;         //16位源端口  
  USHORT   th_dport;         //16位目的端口  
  unsigned   int   th_seq;       //32位序列号  
  unsigned   int   th_ack;       //32位确认号  
  unsigned   char   th_lenres;     //4位首部长度+6位保留字中的4位  
  unsigned   char   th_flag;       //2位保留字+6位标志位  
  USHORT   th_win;           //16位窗口大小  
  USHORT   th_sum;           //16位校验和  
  USHORT   th_urp;           //16位紧急数据偏移量  
  }TCP_HEADER;  
   
  typedef   struct   _iphdr  
  {  
  unsigned   char   h_verlen;       //4位首部长度+4位IP版本号  
  unsigned   char   tos;         //8位服务类型TOS  
  unsigned   short   total_len;     //16位总长度(字节)  
  unsigned   short   ident;       //16位标识  
  unsigned   short   frag_and_flags;   //3位标志位  
  unsigned   char     ttl;         //8位生存时间   TTL  
  unsigned   char   proto;       //8位协议号(TCP,   UDP   或其他)  
  unsigned   short   checksum;     //16位IP首部校验和  
  unsigned   int   sourceIP;       //32位源IP地址  
  unsigned   int   destIP;       //32位目的IP地址  
  }IP_HEADER;  
   
  然后先构造IP包,再构造tcp包,然后将这个包发出去。记得每次在发送前,先随机更改自己的ip,port,Sequence   Number和ID号就行了,还有更新完这些之后要重新计算tcp包的checksum哟,对了,每次发送前最好sleep一下,免得被别人发现太快有诈,被kick掉哟!  
  good   luck!Top

4 楼hujun614(Softworm)回复于 2002-01-04 18:11:16 得分 4

szk(szk):说的好。Top

5 楼key123abc(简简单单)回复于 2002-01-04 18:33:42 得分 4

up  
  up  
  upTop

6 楼szk(szk)回复于 2002-01-07 11:28:18 得分 0

给分。。。。Top

7 楼pitchstar(一站)回复于 2002-01-07 13:48:15 得分 0

szk:  
  哥们,你就给个数据结构就要分?数据结构书上就有,程序我也写过,只是没成又不知道错在哪,才来求源程序对照一下的。。。  
  有没有编译通过的源程序?Top

8 楼netboys(笨小孩)回复于 2002-01-07 14:16:57 得分 100

我有现成的例子,如果你需要,请留下你的EMAIL,我发给你Top

9 楼pitchstar(一站)回复于 2002-01-07 14:17:40 得分 0

netboys:  
  我的地址:topper@163.net  
  多谢~!Top

10 楼pitchstar(一站)回复于 2002-01-07 14:20:03 得分 0

是   tcp   的(最好是   tcp   syn   包,不是syn   也可以,这个我可以自己改)。Top

11 楼pitchstar(一站)回复于 2002-01-07 15:05:23 得分 0

u   &   pTop

12 楼bskay() bskay() bskay()回复于 2002-01-07 15:12:32 得分 4

CSocket的类Top

13 楼zhuang094(hz-huang)回复于 2002-01-07 15:32:52 得分 4

看看Top

14 楼lating(蜡台)回复于 2002-01-07 15:35:13 得分 4

upup  
  Top

15 楼zl_2001(给自己一个机会)回复于 2002-01-07 15:38:49 得分 4

关注  
  Top

16 楼lhuchong()回复于 2002-01-07 16:06:39 得分 4

给我一份lhuchong@263.netTop

17 楼szk(szk)回复于 2002-01-07 16:32:25 得分 0

说漏了一句,要注意加上如下语句:  
  int   foo   =   1;  
  setsockopt(socket,0,IP_HDRINCL,(char *)&foo,sizeof(int));  
  以便允许重构报头Top

18 楼netboys(笨小孩)回复于 2002-01-07 16:55:42 得分 0

我自己写的是一个ping的原程序,写的很糟,难读,我还是给一个别人原程序吧  
  #pragma   pack(1)  
   
  #define   WIN32_LEAN_AND_MEAN    
   
  #include   <winsock2.h>  
  #include   <ws2tcpip.h>  
   
  #include   <stdio.h>  
  #include   <stdlib.h>  
  #include   <time.h>  
   
   
  #define   OICQ_MAX_PACKET   1024  
  #define   OICQ_MAX_MSG   512  
  #define   OICQ_MSG_LEN   45  
  #define   SRC_IP   "127.0.0.1"  
  #define   SRC_PORT   5277  
  #define   DST_PORT   4000  
   
  typedef   struct   ip_hdr  
  {  
  unsigned   char   ip_verlen;    
  unsigned   char   ip_tos;    
  unsigned   short   ip_totallength;    
  unsigned   short   ip_id;    
  unsigned   short   ip_offset;    
  unsigned   char   ip_ttl;    
  unsigned   char   ip_protocol;    
  unsigned   short   ip_checksum;    
  unsigned   int   ip_srcaddr;    
  unsigned   int   ip_destaddr;    
  }   IP_HDR;  
   
  typedef   struct   udp_hdr  
  {  
  unsigned   short   src_portno;    
  unsigned   short   dst_portno;    
  unsigned   short   udp_length;    
  unsigned   short   udp_checksum;    
  }   UDP_HDR;  
   
  char   strMessage   =   {  
  0x02,0x01,0x07,0x00,0x78,0x00,0x00,0x31,0x30,0x30,0x30,0x31,0x1f,0x30,0x1f,  
  0x30,0x30,0x1f,0x32,0x30,0x30,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x1f,0x30,  
  0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x1f,0x68,0x65,0x6c,0x6c,0x6f,0x21,0x03  
  };    
   
  USHORT   checksum(USHORT   *buffer,   int   size)  
  {  
  unsigned   long   cksum=0;  
   
  while   (size   >   1)  
  {  
  cksum   +=   *buffer++;  
  size   -=   sizeof(USHORT);    
  }  
  if   (size)  
  {  
  cksum   +=   *(UCHAR*)buffer;    
  }  
  cksum   =   (cksum   >>   16)   +   (cksum   &   0xffff);  
  cksum   +=   (cksum   >>16);    
   
  return   (USHORT)(~cksum);    
  }  
   
  int   main(int   argc,   char   **argv)  
  {  
  WSADATA   wsd;  
  SOCKET   s;  
  BOOL   bOpt;  
  struct   sockaddr_in   remote;    
  IP_HDR   ipHdr;  
  UDP_HDR   udpHdr;  
  int   ret;  
  DWORD   i;  
  unsigned   short   iTotalSize,    
  iUdpSize,    
  iUdpChecksumSize,  
  iIPVersion,  
  iIPSize,  
  cksum   =   0;  
  char   buf,  
  *ptr   =   NULL;  
   
  printf("Spoof   OICQ   Msg   Sender   -   by   Janker@371.net\n\n");  
   
  if(argc!=2)   {    
  printf("usage:   OICQSEND   Destination_IP_Address");    
  ExitProcess(1);  
  }  
   
  srand((unsigned)time(NULL));  
  strMessage=rand();  
   
  if   (WSAStartup(MAKEWORD(2,2),   &wsd)   !=   0)  
  {  
  printf("WSAStartup()   failed:   %d\n",   GetLastError());  
  return   -1;  
  }  
  s   =   WSASocket(AF_INET,   SOCK_RAW,   IPPROTO_UDP,   NULL,   0,0);  
  if   (s   ==   INVALID_SOCKET)  
  {  
  printf("WSASocket()   failed:   %d\n",   WSAGetLastError());  
  return   -1;  
  }  
  bOpt   =   TRUE;  
  ret   =   setsockopt(s,   IPPROTO_IP,   IP_HDRINCL,   (char   *)&bOpt,   sizeof(bOpt));  
  if   (ret   ==   SOCKET_ERROR)  
  {  
  printf("setsockopt(IP_HDRINCL)   failed:   %d\n",   WSAGetLastError());  
  return   -1;  
  }  
   
  iTotalSize   =   sizeof(ipHdr)   +   sizeof(udpHdr)   +   OICQ_MSG_LEN;  
   
  iIPVersion   =   4;  
  iIPSize   =   sizeof(ipHdr)   /   sizeof(unsigned   long);  
   
  ipHdr.ip_verlen   =   (iIPVersion   <<   4)   &brvbar;   iIPSize;  
  ipHdr.ip_tos   =   0;    
  ipHdr.ip_totallength   =   htons(iTotalSize);    
  ipHdr.ip_id   =   0;    
  ipHdr.ip_offset   =   0;    
  ipHdr.ip_ttl   =   128;    
  ipHdr.ip_protocol   =   0x11;    
  ipHdr.ip_checksum   =   0   ;    
  ipHdr.ip_srcaddr   =   inet_addr(SRC_IP);    
  ipHdr.ip_destaddr   =   inet_addr(argv);    
   
  iUdpSize   =   sizeof(udpHdr)   +   OICQ_MSG_LEN;  
   
  udpHdr.src_portno   =   htons(SRC_PORT)   ;  
  udpHdr.dst_portno   =   htons(DST_PORT)   ;  
  udpHdr.udp_length   =   htons(iUdpSize)   ;  
  udpHdr.udp_checksum   =   0   ;  
   
  iUdpChecksumSize   =   0;  
  ptr   =   buf;  
  ZeroMemory(buf,   OICQ_MAX_PACKET);  
   
  memcpy(ptr,   &ipHdr.ip_srcaddr,   sizeof(ipHdr.ip_srcaddr));    
  ptr   +=   sizeof(ipHdr.ip_srcaddr);  
  iUdpChecksumSize   +=   sizeof(ipHdr.ip_srcaddr);  
   
  memcpy(ptr,   &ipHdr.ip_destaddr,   sizeof(ipHdr.ip_destaddr));    
  ptr   +=   sizeof(ipHdr.ip_destaddr);  
  iUdpChecksumSize   +=   sizeof(ipHdr.ip_destaddr);  
   
  ptr++;  
  iUdpChecksumSize   +=   1;  
   
  memcpy(ptr,   &ipHdr.ip_protocol,   sizeof(ipHdr.ip_protocol));    
  ptr   +=   sizeof(ipHdr.ip_protocol);  
  iUdpChecksumSize   +=   sizeof(ipHdr.ip_protocol);  
   
  memcpy(ptr,   &udpHdr.udp_length,   sizeof(udpHdr.udp_length));    
  ptr   +=   sizeof(udpHdr.udp_length);  
  iUdpChecksumSize   +=   sizeof(udpHdr.udp_length);  
   
  memcpy(ptr,   &udpHdr,   sizeof(udpHdr));    
  ptr   +=   sizeof(udpHdr);  
  iUdpChecksumSize   +=   sizeof(udpHdr);  
   
  for(i   =   0;   i   <OICQ_MSG_LEN;   i++,   ptr++)  
  *ptr   =   strMessage;  
  iUdpChecksumSize   +=   OICQ_MSG_LEN;  
   
  cksum   =   checksum((USHORT   *)buf,   iUdpChecksumSize);  
  udpHdr.udp_checksum   =   cksum;  
   
  ZeroMemory(buf,   OICQ_MAX_PACKET);  
  ptr   =   buf;  
   
  memcpy(ptr,   &ipHdr,   sizeof(ipHdr));   ptr   +=   sizeof(ipHdr);  
  memcpy(ptr,   &udpHdr,   sizeof(udpHdr));   ptr   +=   sizeof(udpHdr);  
  memcpy(ptr,   strMessage,   OICQ_MSG_LEN);  
   
  remote.sin_family   =   AF_INET;  
  remote.sin_port   =   htons(DST_PORT);  
  remote.sin_addr.s_addr   =   inet_addr(argv);  
   
  ret   =   sendto(s,   buf,   iTotalSize,   0,   (SOCKADDR   *)&remote,   sizeof(remote));  
  if   (ret   ==   SOCKET_ERROR)  
  printf("sendto()   failed:   %d\n",   WSAGetLastError());  
  else    
  printf("Send   O.K.!");  
  closesocket(s)   ;  
  WSACleanup()   ;  
   
  return   0;  
  }  
  Top

19 楼pitchstar(一站)回复于 2002-01-08 10:19:29 得分 0

netboys   和   szk   ,我试一下你们的办法,两位有空帮我看一下:  
   
  http://www.csdn.net/expert/topic/421/421451.shtm  
   
  问题之源Top

20 楼pitchstar(一站)回复于 2002-01-08 15:00:23 得分 0

netboys   :  
  你的例子跟我的代码犯报一个错,我可是一点没改。。。Top

21 楼pitchstar(一站)回复于 2002-01-09 09:35:19 得分 0

等。。。代码Top

22 楼gold_jin()回复于 2002-01-09 11:23:45 得分 4

诸位:贴一个可以正确执行的ping的程序吧,我最近正在找这方面的东西Top

23 楼Bird1945(没有钱,我拿什么来爱你?)回复于 2002-01-09 11:33:40 得分 4

学习学习!Top

24 楼howard(舍.得.)回复于 2002-01-09 11:44:36 得分 4

http://www.csdn.net/expert/topic/464/464120.shtm  
   
  帮帮我吧(网吧管理软件)    
   
  各位,还有别的要注意的安全方面的问题吗?Top

25 楼alpasino(地狱天使)回复于 2002-01-09 11:48:49 得分 4

*_*Top

26 楼pitchstar(一站)回复于 2002-01-10 08:43:06 得分 0

继续等,为什么好好的程序在我的机器上不执行Top

27 楼mjs2000(宁静致远)回复于 2002-01-10 09:03:32 得分 4

提示什么错误吗Top

28 楼lyneville(心佛)回复于 2002-01-10 09:31:49 得分 4

黑糊糊后Top

29 楼pitchstar(一站)回复于 2002-01-10 16:52:49 得分 0

mjs2000:  
  我自己写的,和上边的弟兄给提供的,我从网上还真找到一个   syn   的例子,程序都可以运行,  
  但   sendto   都返回   -1,WSAGetLastError()的值是   10049,msdn   解释为“The   remote   address   is   not   a   valid   address”  
   
  调试没办法跟进sendto   ,盲人摸象的改几个地方都没起作用,你有什么高见?  
  Top

30 楼zjhsoft(★  ★)回复于 2002-01-10 17:08:22 得分 2

upup  
  Top

31 楼pitchstar(一站)回复于 2002-02-04 09:36:51 得分 0

多谢各位,散分Top

32 楼thd111(小蛐蛐)回复于 2002-02-04 10:13:08 得分 2

UP   一下,^_^Top

33 楼xiaoxiaohan(萧晓寒)回复于 2002-02-04 10:22:04 得分 2

VC光盘下\SAMPLES\VC98\MFC\INTERNET目录下有很多例子。Top

34 楼dct1999(宇宙天空)回复于 2002-02-04 10:49:06 得分 2

hehe   ,   upTop

35 楼Kevin_qing()回复于 2002-02-04 10:56:29 得分 12

老兄,那个你是在98下面运行的吧?         Top

36 楼pitchstar(一站)回复于 2002-02-05 16:34:36 得分 0

kevin_qing   ,是在   2000   advance   下编译、运行的,我的机器有两个   ip   ,一个内部网,一个外部网,不知道跟这有没有关系。  
   
  昨天想散分,结果出错了,没散成,今天再散,各位如果有什么意见请继续发,我一直在看,我先给其他早先回答的弟兄们散分。以后再回的帖子将另开主题散分。Top

责任编辑: efish 参与评论 查找更多:
相关文章
请教微软技术支持中心工程师,如何在Excel中指定某些…

请教微软技术支持中心工程师,如何在Excel中指定某些单元格(只读,可写)权限?

楼主jgcg(蒋sir)2002-01-04 17:48:29 在 其他开发语言 / Offic…
如何定义一新的数据类型使其能够存放任意常的数值(有… 如何定义一新的数据类型使其能够存放任意常的数值(有自己定)!
请高手推荐pb学习方法及几本电子版的好书!!不胜感… 请高手推荐pb学习方法及几本电子版的好书!!不胜感激!!!
请问如何在网页中向我的ATL传参数?

请问如何在网页中向我的ATL传参数?

楼主szk(szk)2002-01-04 17:54:34 在 VC/MFC / 非技术类 提问

我有一个atl,它需要从网页中读取参数,如…

INDY控件中是如何进行抄送发邮件的?BCC、CC是什么意… INDY控件中是如何进行抄送发邮件的?BCC、CC是什么意思?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想