SnifferDlg.h
上传用户:benyan892
上传日期:2010-01-28
资源大小:158k
文件大小:3k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. // SnifferDlg.h : header file
  2. //
  3. #pragma once
  4. #include <WinSock2.h>
  5. #include <MSTcpIP.h>
  6. #include "Definition.h"
  7. #include "iphdr.h"
  8. #include <afxtempl.h>
  9. #include "afxwin.h"
  10. #include "afxcmn.h"
  11. struct Session
  12. {
  13. unsigned int sourcePort, destPort;
  14. CString sourceIP, destIP;
  15.     Session* pOtherSide;
  16. tcp_seq ISN;
  17. DWORD len;
  18. };
  19. class TVPacketItem
  20. {
  21. public:
  22. const CString m_SourceIP;
  23. const CString m_DestIP;
  24. const CString m_SourcePort;
  25. const CString m_DestPort;
  26. const CString m_Size;
  27. const CString m_Flags;
  28. const CString m_Sequence;
  29. const CString m_Ack;
  30. TVPacketItem(const CString& sourceIP, const CString& sourcePort, const CString& destIP,
  31. const CString& destPort, const CString& size, const CString& flags, const CString& sequence,
  32. const CString& ack)
  33. : m_SourceIP(sourceIP), m_SourcePort( sourcePort ), m_DestIP( destIP ),
  34. m_DestPort( destPort ), m_Size ( size ), m_Flags ( flags ),
  35. m_Sequence ( sequence ), m_Ack( ack )
  36. {
  37. }
  38. };
  39. #define LV_SOURCE_IP 0
  40. #define LV_DEST_IP 1
  41. #define LV_SOURCE_PORT 2
  42. #define LV_DEST_PORT 3
  43. #define LV_SIZE 4
  44. #define LV_SEQUENCE 5
  45. #define LV_ACK 6
  46. #define LV_FLAG 7
  47. // CSnifferDlg dialog
  48. class CSnifferDlg : public CDialog
  49. {
  50. // Construction
  51. public:
  52. CSnifferDlg(CWnd* pParent = NULL); // standard constructor
  53. static ULONG WINAPI SnifferThread(LPVOID pParam);
  54. // Starts the sniffing process
  55. bool StartSniffing(void);
  56. // Dialog Data
  57. enum { IDD = IDD_SNIFFER_DIALOG };
  58. protected:
  59. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
  60. // Implementation
  61. protected:
  62. HICON m_hIcon;
  63. // Generated message map functions
  64. virtual BOOL OnInitDialog();
  65. afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
  66. afx_msg void OnPaint();
  67. afx_msg HCURSOR OnQueryDragIcon();
  68. DECLARE_MESSAGE_MAP()
  69. private:
  70. CImageList m_IL;
  71. void InsertPacketToTV(const TVPacketItem& packetItem);
  72. bool m_bExit;
  73. HANDLE m_hThread;
  74. DWORD  m_dwThreadID;
  75. // Array of Interfaces
  76. CStringArray m_Interfaces;
  77. // Print the session to a log file
  78. void PrintSession( Session* pSession );
  79. // Print the packet to a log file
  80. void PrintPacket( const CString& source, const CString& destination,TCP_HDR* pTCPHeader, DWORD dwSize, const CString& errors ) ;
  81. bool ParseTCPPacket(const CString& source, const CString& destination, TCP_HDR* pTCPHeader, char* pData, unsigned long len );
  82. //
  83. // Filter Variables
  84. //
  85. SOCKADDR_STORAGE m_saSourceAddress,         // Source address to filter
  86. m_saDestinationAddress;     // Destination address to filter
  87. unsigned long    m_ulFilterMask;          // Indicates which fields in IP hdr to
  88. //    filter on.
  89. CFile  m_Logger;
  90. CArray<Session*,Session*> m_Array;  
  91. bool Init(void);
  92. // Decodes the packet
  93. bool DecodePacket(char* pData, DWORD dwSize);
  94. void ConvertAddress( unsigned int address, CString& strAddress );
  95. public:
  96. bool GetInterfaces(CStringArray& interfaces);
  97. afx_msg void OnSize(UINT nType, int cx, int cy);
  98. void ResizeForm(void);
  99. private:
  100. CComboBox m_CmbInterfaces;
  101. public:
  102. CStatic m_FrmInterfaces;
  103. afx_msg void OnBnClickedStartsniffing();
  104. private:
  105. // Selected Interface
  106. CString m_SelInterface;
  107. public:
  108. afx_msg void OnClose();
  109. CButton m_BtnStartSniffing;
  110. // TreeView of packets
  111. CTreeCtrl m_TVPackets;
  112. };