Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > RawSocke原始套接字实现Sniffer嗅探 下
【标  题】:RawSocke原始套接字实现Sniffer嗅探 下
【关键字】:c,if,Sniffer,Raw,RawSocke,Sniffer
【来  源】:网络

RawSocke原始套接字实现Sniffer嗅探 下

Your Ad Here AnsiString __fastcall TMainForm::GetProtocolTxt(int Protocol)
{
  switch (Protocol)
  {
    case IPPROTO_ICMP :      //1        /* control message protocol */
      return PROTOCOL_STRING_ICMP_TXT;
    case IPPROTO_TCP :      //6        /* tcp */
      return PROTOCOL_STRING_TCP_TXT;
    case IPPROTO_UDP :      //17       /* user datagram protocol */
      return PROTOCOL_STRING_UDP_TXT;
    default :
      return PROTOCOL_STRING_UNKNOWN_TXT;
  }
}
//------------------------------------------------------------


//******************************************************//
//* Header File: WMain.h for WMain.cpp class TMainForm
//****************************************************//
//----------------------------------------------------

#ifndef WMainH
#define WMainH
//---------------------------------------------------------------------------
#define BUFFER_SIZE 65535

#include
#include
#include
#include
#include
#include
#include
#include "netmon.h"


//----------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
  TPanel *Panel1;
  TButton *btnCtrl;
  TListView *lsvPacket;
  TLabel *Label1;
  void __fastcall btnCtrlClick(TObject *Sender);
  void __fastcall lsvPacketColumnClick(TObject *Sender,
     TListColumn *Column);
  void __fastcall lsvPacketCompare(TObject *Sender, TListItem *Item1,
     TListItem *Item2, int Data, int &Compare);
  void __fastcall Label1Click(TObject *Sender);
private: // User declarations
  AnsiString __fastcall GetProtocolTxt(int Protocol);
public: // User declarations
  SOCKET   sock;
  SOCKADDR_IN addr_in;
  IP     ip;
  TCP     tcp;
  PSUHDR   psdHeader;
  char    RecvBuf[BUFFER_SIZE];
  bool    bStop;

  int iSortDirection;
  int iColumnToSort;
  
  __fastcall TMainForm(TComponent* Owner);
  __fastcall ~TMainForm();
};
//------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//------------------------------------------------------
#endif

  偷了个懒, IP, TCP 头及一些宏定义用了 netmon.h 的头, 这个文件在 BCB6 的 include 目录下可以找得到, 其中与本程序相关内容如下:

//****************************************************//
//* Header File: netmon.h
//********************************************************//
//
// IP Packet Structure
//
typedef struct _IP
{
  union
  {
    BYTE  Version;
    BYTE  HdrLen;
  };
  BYTE ServiceType;
  WORD TotalLen;
  WORD ID;
  union
  {
    WORD  Flags;
    WORD  FragOff;
  };
  BYTE TimeToLive;
  BYTE Protocol;
  WORD HdrChksum;
  DWORD  SrcAddr;
  DWORD  DstAddr;
  BYTE Options[0];
} IP;

typedef IP * LPIP;
typedef IP UNALIGNED * ULPIP;

//
// TCP Packet Structure
//
typedef struct _TCP
  {
  WORD SrcPort;
  WORD DstPort;
  DWORD SeqNum;
  DWORD AckNum;
  BYTE DataOff;
  BYTE Flags;
  WORD Window;
  WORD Chksum;
  WORD UrgPtr;
  } TCP;

typedef TCP *LPTCP;
typedef TCP UNALIGNED * ULPTCP;

// upper protocols
#define PROTOCOL_STRING_ICMP_TXT    "ICMP"
#define PROTOCOL_STRING_TCP_TXT    "TCP"
#define PROTOCOL_STRING_UDP_TXT    "UDP"
#define PROTOCOL_STRING_SPX_TXT    "SPX"
#define PROTOCOL_STRING_NCP_TXT    "NCP"

#define PROTOCOL_STRING_UNKNOW_TXT   "UNKNOW"


  这个文件也有人声称没有.
//*******************************************************//
//* Header File: mstcpip.h
//*********************************************************//
// Copyright (c) Microsoft Corporation. All rights reserved.
#if _MSC_VER > 1000
#pragma once
#endif

/* Argument structure for SIO_KEEPALIVE_VALS */

struct tcp_keepalive {
  u_long onoff;
  u_long keepalivetime;
  u_long keepaliveinterval;
};

// New WSAIoctl Options

#define SIO_RCVALL      _WSAIOW(IOC_VENDOR,1)
#define SIO_RCVALL_MCAST   _WSAIOW(IOC_VENDOR,2)
#define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3)
#define SIO_KEEPALIVE_VALS  _WSAIOW(IOC_VENDOR,4)
#define SIO_ABSORB_RTRALERT  _WSAIOW(IOC_VENDOR,5)
#define SIO_UCAST_IF     _WSAIOW(IOC_VENDOR,6)
#define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7)
#define SIO_INDEX_BIND    _WSAIOW(IOC_VENDOR,8)
#define SIO_INDEX_MCASTIF   _WSAIOW(IOC_VENDOR,9)
#define SIO_INDEX_ADD_MCAST  _WSAIOW(IOC_VENDOR,10)
#define SIO_INDEX_DEL_MCAST  _WSAIOW(IOC_VENDOR,11)

// Values for use with SIO_RCVALL* options
#define RCVALL_OFF       0
#define RCVALL_ON       1
#define RCVALL_SOCKETLEVELONLY 2

  现在我们自已的 Sniffer 就做好了, Run, Start......哇, 这么多数据包, 都是从这一台机器上发出的, 它在干什么? 原来 Adminstrator 密码为空, 中了尼姆达病毒!

六. 小结
  优点: 实现简单, 不需要做驱动程序就可实现抓包.
  缺点: 数据包头不含帧信息, 不能接收到与 IP 同层的其它数据包, 如 ARP, RARP...
  这里提供的程序仅仅是一个 Sniffer 的例子, 没有对数据包进行进一步的分析. 写此文的目的在于熟悉Raw Socket 编程方法, 了解 TCP/IP 协议结构原理以及各协议之间的关系.
利用SQL注入缺陷进行攻击的方法及代码:【上一篇】
病毒的高级编写技巧:【下一篇】
【相关文章】
  • JavaScript与Java的区别
  • gcc常用的编译选项对代码的影响
  • 中国计算机教学网的mysql.class.php
  • EXE变DOC的方法
  • 高质量C++/C编程指南 -- C++函数的高级特性
  • 关于Recordset持久性的一点点研究
  • 高质量C++/C编程指南 -- 前言
  • CCProxy Log Stack Overflow 漏洞浅析(1)
  • CCProxy Log Stack Overflow 漏洞浅析(2)
  • CCProxy Log Stack Overflow 漏洞浅析(3)
  • 【随机文章】
  • UNIX 中Find命令的用法
  • 与afreez一起学习DirectFB之:framebuffer相关基础
  • 经典问题--纵横图(幻方&magic matrix)的详细算法和实现 C
  • javascript 判断当前窗口是否是顶级窗口的方法
  • 唱得响亮
  • rufeng教程-破解软件的基础
  • 经典哲理
  • 制定计划的几个技巧
  • Installing Oracle 9i on RedHat Linux 7.1, 7.2, 7.3
  • 关于0x80040e14错误 
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.