鱼C论坛

 找回密码
 立即注册
查看: 3887|回复: 7

[技术交流] 原始套接字代码笔记,可做嗅探器

[复制链接]
发表于 2015-4-12 10:17:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 无名侠 于 2015-4-12 10:20 编辑

  当是我学习计算机网络的笔记吧,不过是代码。得到数据没特别的处理,只是提取出IP报头里面的源地址和目的地址。如果上层是TCP/IP协议就提取出目的端口和源端口。
什么用?
    嗅探工具的基础。实现FTP密码嗅探是很容易的哦。
  1. typedef struct _iphdr
  2. {
  3.     unsigned char h_lenver;          //4位首部长度+4位IP版本号
  4.     unsigned char tos;               //8位服务类型TOS
  5.     unsigned short total_len;            //16位总长度(字节)
  6.     unsigned short ident;            //16位标识
  7.     unsigned short frag_and_flags;       //16位偏移量
  8.     unsigned char ttl;               //8位生存时间 TTL
  9.     unsigned char proto;             //8位协议 (TCP, UDP 或其他)
  10.     unsigned short checksum;         //16位IP首部校验和
  11.     unsigned int sourceIP;           //32位源IP地址
  12.     unsigned int destIP;                 //32位目的IP地址
  13. }IP_HEADER;
  14. typedef struct _tcphdr               //定义TCP首部
  15. {
  16.     USHORT th_sport;                //16位源端口
  17.     USHORT th_dport;               //16位目的端口
  18.     unsigned int th_seq;                  //32位序列号
  19.     unsigned int th_ack;               //32位确认号
  20.     unsigned char th_lenres;              //4位首部长度/6位保留字
  21.     unsigned char th_flag;            //6位标志位
  22.     USHORT th_win;                 //16位窗口大小
  23.     USHORT th_sum;              //16位校验和
  24.     USHORT th_urp;                 //16位紧急数据偏移量
  25. }TCP_HEADER;
复制代码
  1. #include "stdafx.h"
  2. #include <WinSock2.h>
  3. #define   SIO_RCVALL   _WSAIOW(IOC_VENDOR,1)
  4. #pragma comment(lib,"ws2_32.lib")

  5. typedef struct _iphdr
  6. {
  7.     unsigned char h_lenver;          //4位首部长度+4位IP版本号
  8.     unsigned char tos;               //8位服务类型TOS
  9.     unsigned short total_len;            //16位总长度(字节)
  10.     unsigned short ident;            //16位标识
  11.     unsigned short frag_and_flags;       //16位偏移量
  12.     unsigned char ttl;               //8位生存时间 TTL
  13.     unsigned char proto;             //8位协议 (TCP, UDP 或其他)
  14.     unsigned short checksum;         //16位IP首部校验和
  15.     unsigned int sourceIP;           //32位源IP地址
  16.     unsigned int destIP;                 //32位目的IP地址
  17. }IP_HEADER;
  18. typedef struct _tcphdr               //定义TCP首部
  19. {
  20.     USHORT th_sport;                //16位源端口
  21.     USHORT th_dport;               //16位目的端口
  22.     unsigned int th_seq;                  //32位序列号
  23.     unsigned int th_ack;               //32位确认号
  24.     unsigned char th_lenres;              //4位首部长度/6位保留字
  25.     unsigned char th_flag;            //6位标志位
  26.     USHORT th_win;                 //16位窗口大小
  27.     USHORT th_sum;              //16位校验和
  28.     USHORT th_urp;                 //16位紧急数据偏移量
  29. }TCP_HEADER;


  30. //////////////////////////////////////////////////////////////////////////
  31. //初始化套接字
  32. bool InitSocket()
  33. {
  34.     WSADATA wsdata={0};
  35.     return !WSAStartup(MAKEWORD(2,2),&wsdata);
  36. }
  37. //解析TCP头部
  38. void DecodeTcpPacket(char *pData)
  39. {
  40.     TCP_HEADER *pTcp;
  41.     pTcp=(TCP_HEADER *)pData;
  42.     printf("端口:%d\n",ntohs(pTcp->th_sport));
  43. }
  44. //解码IP头部
  45. void DecodeIpPacket(char *pData)
  46. {
  47.     IP_HEADER *pIp;
  48.     in_addr Sip,Dip;
  49.     char szDip[32]={0},szSip[32]={0};
  50.     pIp = (IP_HEADER *)pData;
  51.     Sip.S_un.S_addr = pIp->sourceIP;
  52.     Dip.S_un.S_addr=pIp->destIP;
  53.     strcpy(szDip,inet_ntoa(Dip));
  54.     strcpy(szSip,inet_ntoa(Sip));
  55.     printf("源IP:%s\n目标IP:%s\n",szSip,szDip);
  56.     switch (pIp->proto)
  57.     {
  58.     case IPPROTO_TCP:
  59.         printf("协议:TCP\n");
  60.         DecodeTcpPacket(&pData[sizeof(TCP_HEADER)]);
  61.         break;
  62.     case IPPROTO_UDP:
  63.         printf("协议:UDP\n");
  64.         break;
  65.     case  IPPROTO_ICMP:
  66.         printf("协议:ICMP\n");
  67.         break;
  68.     default:
  69.         break;
  70.     }
  71. }
  72. //////////////////////////////////////////////////////////////////////////
  73. int _tmain(int argc, _TCHAR* argv[])
  74. {
  75.     if (!InitSocket())
  76.     {
  77.         printf("初始化Socket库失败!\n");
  78.         getchar();
  79.     }
  80.     /////   变量      /////
  81.     SOCKET  sock;
  82.     SOCKADDR_IN SourceAddr={0};        //源地址
  83.     char HostName[MAX_PATH]={0};   //主机名
  84.     char DataBuffer[1024]={0};     //数据缓冲区
  85.     ////    代码      ////
  86.     sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
  87.     if(sock==INVALID_SOCKET)
  88.     {
  89.         printf("创建套接字失败!\n");
  90.         getchar();
  91.     }
  92.     if(SOCKET_ERROR==gethostname(HostName,sizeof(HostName)))
  93.     {
  94. herr:

  95.         printf("获取主机名失败!\n");
  96.         closesocket(sock);
  97.         getchar();
  98.     }
  99.     printf("主机名:%s\n",HostName);
  100.     HOSTENT *host=gethostbyname(HostName);
  101.     if(!host)goto herr;
  102.     memcpy(&SourceAddr.sin_addr.S_un.S_addr,host->h_addr_list[0],host->h_length);
  103.     SourceAddr.sin_port=0;
  104.     SourceAddr.sin_family=AF_INET;
  105.     //打印主机IP
  106.     printf("IP:%s\n",inet_ntoa(SourceAddr.sin_addr));
  107.     //绑定
  108.     if(SOCKET_ERROR==bind(sock,(PSOCKADDR)&SourceAddr,sizeof(SOCKADDR_IN)))
  109.     {
  110.         printf("绑定失败!\n");
  111.         closesocket(sock);
  112.         getchar();
  113.     }
  114.     //// 设置混杂模式
  115.     DWORD dw=1;
  116.     if(ioctlsocket(sock,SIO_RCVALL,&dw)!=0)
  117.     {
  118.         printf("设置混杂模式失败!\n");
  119.         closesocket(sock);
  120.         getchar();
  121.     }

  122.     while (true)
  123.     {
  124.         DWORD DataLen;
  125.         DataLen=recv(sock,DataBuffer,1024,0);
  126.         if (DataLen>0)
  127.         {
  128.             printf("------------------------------------\n");
  129.             DecodeIpPacket(DataBuffer);
  130.         }
  131.     }

  132.     return 0;
  133. }
复制代码



评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
freeparty + 5 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-12 16:26:18 | 显示全部楼层
侠侠好厉害,多多分享哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-12 21:21:32 From FishC Mobile | 显示全部楼层
谢谢分享,祝君好运.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-12 23:42:56 | 显示全部楼层
:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-22 17:03:04 | 显示全部楼层
谢谢分享!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-25 18:00:36 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-27 19:48:04 | 显示全部楼层
LZ好人。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-22 16:35:29 | 显示全部楼层
不能抓取链路层的包
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表