工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
VB设计Win2000下截获IP数据包程序
[文章信息]
作者:jyu1221
时间:2005-02-16
出处:blog
责任编辑:方舟
[文章导读]
以下是在VB中截获WIN2000下TCP/IP包的源代码,在VB6.0,win2000下测试通过
advertisement
热点推荐
· MFC程序员的WTL指南之高级用户界面类
· 初探Java类加载机制的奥秘
· 不同类型文件的压缩方案
· Excel动画图解:“高级筛选”
· 如何使用Ghost备份和恢复系统
[正文]
  以下是在VB中截获WIN2000下TCP/IP包的源代码,在VB6.0,win2000下测试通过,需要注意的地方是,1.必须和本地的一块网卡,2.每次获取数据后必须有一段延时。3.数据取到之后放在Buff的数组中。4.把以下的代码放在一个模块中就可以了。

'-----------------------------代码开始--------------------------------------------------
Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, addr As SOCK_ADDR, ByVal namelen As Long) As Long
Declare Function closesocket Lib "ws2_32.dll" (ByVal s As Long) As Long
Declare Function connect Lib "ws2_32.dll" (ByVal s As Long, name As SOCK_ADDR, ByVal namelen As Integer) As Long
Declare Function inet_addr Lib "ws2_32.dll" (ByVal cp As String) As Long
Declare Function htons Lib "ws2_32.dll" (ByVal hostshort As Integer) As Integer
Declare Function recv Lib "ws2_32.dll" (ByVal s As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long
Declare Function send Lib "ws2_32.dll" (ByVal s As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long
Declare Function shutdown Lib "ws2_32.dll" (ByVal s As Long, ByVal how As Long) As Long
Declare Function ioctlsocket Lib "ws2_32.dll" (ByVal s As Long, ByVal v As Long, ut As Long) As Long
Declare Function socket Lib "ws2_32.dll" (ByVal af As Long, ByVal type_specification As Long, ByVal protocol As Long) As Long
Declare Function WSACancelBlockingCall Lib "ws2_32.dll" () As Long
Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Declare Function WSAGetLastError Lib "ws2_32.dll" () As Long
Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequired As Integer, wsData As WSA_DATA) As Long
Declare Function WSASocketA Lib "ws2_32.dll" (ByVal af As Long, ByVal type1 As Long, ByVal protocol As Long, lpProtocolInfo As Long, g As Long, ByVal dwFlags As Long)
Declare Function WSAIoctl Lib "ws2_32.dll" (ByVal s As Long, ByVal dwIoControlCode As Long, lpvInBuffer As Long, ByVal cbInBuffer As Long, lpvOutBuffer As Long, ByVal cbOutBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As Long, lpCompletionRoutine As Long) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Const WSADESCRIPTION_LEN = 256
Public Const WSASYS_STATUS_LEN = 128

Type WSA_DATA
 wVersion As Integer
 wHighVersion As Integer
 strDescription(WSADESCRIPTION_LEN + 1) As Byte
 strSystemStatus(WSASYS_STATUS_LEN + 1) As Byte
 iMaxSockets As Integer
 iMaxUdpDg As Integer
 lpVendorInfo As Long
End Type

Type IN_ADDR
 S_addr As Long
End Type

Type SOCK_ADDR
 sin_family As Integer
 sin_port As Integer
 sin_addr As IN_ADDR
 sin_zero(0 To 7) As Byte
End Type

Type IPHeader
 lenver As Byte
 tos As Byte
 len As Integer
 ident As Integer
 flags As Integer
 ttl As Byte
 proto As Byte
 checksum As Integer
 sourceIP As Long
 destIP As Long
End Type

Const AF_INET = 2
Const SOCK_RAW = 3
Const IPPROTO_IP = 0
Const IPPROTO_TCP = 6
Const IPPROTO_UDP = 17
Const MAX_PACK_LEN = 65535
Const SOCKET_ERROR = -1&

Private mwsaData As WSA_DATA
Private m_hSocket As Long

Private msaLocalAddr As SOCK_ADDR
Private msaRemoteAddr As SOCK_ADDR

Sub Main()
 Dim nResult As Long

 nResult = WSAStartup(&H202, mwsaData)
 If nResult <> WSANOERROR Then
  MsgBox "Error en WSAStartup"
  Exit Sub
 End If

 m_hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP)
 If (m_hSocket = INVALID_SOCKET) Then
  MsgBox "Error in socket"
  Exit Sub
 End If

 msaLocalAddr.sin_family = AF_INET
 msaLocalAddr.sin_port = 0
 msaLocalAddr.sin_addr.S_addr = inet_addr("192.168.1.125") '这里需要你自己的网卡的IP地址

 nResult = bind(m_hSocket, msaLocalAddr, Len(msaLocalAddr))
 If (nResult = SOCKET_ERROR) Then
  MsgBox "Error in bind"
  Exit Sub
 End If

 Dim InParamBuffer As Long
 Dim BytesRet As Long
 BytesRet = 0
 InParamBuffer = 1

 nResult = ioctlsocket(m_hSocket, &H98000001, 1)

 If nResult <> 0 Then
  MsgBox "ioctlsocket"
  Exit Sub
 End If

 Dim strData As String
 Dim nReceived As Long
 
 '截获来的数据放在BUFF里面
 Dim Buff(0 To MAX_PACK_LEN) As Byte
 Dim IPH As IPHeader

 Do Until False '这个例子里,一直获取
 DoEvents
 nResult = recv(m_hSocket, Buff(0), MAX_PACK_LEN, 0)
 If nResult = SOCKET_ERROR Then
  MsgBox "Error in RecvData::recv"
  Exit Do
 End If
 CopyMemory IPH, Buff(0), Len(IPH) '为了访问方便
 Select Case IPH.proto
  Case IPPROTO_TCP
   'frmHookTcpip.Text1.SelText = HexIp2DotIp(IPH.sourceIP)
   'frmHookTcpip.Text1.SelText = " -----> "
   'frmHookTcpip.Text1.SelText = HexIp2DotIp(IPH.destIP)
   'frmHookTcpip.Text1.SelText = vbCrLf
   Debug.Print HexIp2DotIp(IPH.sourceIP) & " -----> " & HexIp2DotIp(IPH.destIP)
   End Select
  Loop

 nResult = shutdown(m_hSocket, 2)
 nResult = closesocket(m_hSocket)
 nResult = WSACancelBlockingCall
 nResult = WSACleanup
End Sub

Function HexIp2DotIp(ByVal ip As Long) As String
 Dim s As String, p1 As String, p2 As String, p3 As String, p4 As String
 s = Right("00000000" & Hex(ip), 8)
 p1 = Val("&h" & Mid(s, 1, 2))
 p2 = Val("&h" & Mid(s, 3, 2))
 p3 = Val("&h" & Mid(s, 5, 2))
 p4 = Val("&h" & Mid(s, 7, 2))
 HexIp2DotIp = p4 & "." & p3 & "." & p2 & "." & p1
 End Function
'-----------------------------代码结束--------------------------------------------------

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 用VB编写异步多线程下载程序
  • 适合Visual Basic初学者的10个小技巧
  • 用VB实现实时曲线的绘制和保存
  • 用Visual Basic设计手机短信收发程序
  • VB图像处理之图像的亮度对比度调整
  • Verizon收购MCI可能受阻 部分股东反对出售
  • 惠普CEO卡莉辞职 全球商界最有权势女CEO退场
  • 女掌门卡莉辞职 惠普追杀联想计划未受影响
  • 摩托罗拉推600万部40美元手机 06再降10美元
  • 电游室起火 10余上网人员从浓烟中冲出险境
  • 投资6亿建30部气象预警雷达 规模世界第二
  • 联通力推CDMA炫机 开始在北京营业厅销售
  • 女CEO辞职无损惠普“形象” 股价不降反升
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索