16,555
社区成员
发帖
与我相关
我的任务
分享
'构造函数
Sub New()
ReDim buffer(mVarBufferLength)
'建立原始套结字
sck = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)
sck.Blocking = False '是否处于阻塞模式
sck.Bind(New IPEndPoint(Dns.GetHostEntry(Dns.GetHostName).AddressList(0), 0))
If Not SetSockoption() Then Throw New Exception("Error! Unable to setup socket options")
End Sub
'设置网卡工作在混合模式,以便可以截获所有流经网卡的数据包
Private Function SetSockoption()As Boolean
Try
sck.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1)
Dim DataIN() As Byte = {1, 0, 0, 0}
Dim DataOUT(4) As Byte
Dim SIO_RCVALL As Integer = &H98000001
sck.IOControl(SIO_RCVALL, DataIN, DataOUT)
If (BitConverter.ToInt32(DataOUT, 0) <> 0) Then Return False Else Return True
Catch ex As SocketException
MsgBox(ex.Message, MsgBoxStyle.Critical, "设置网卡工作模式")
Return False
End Try
End Function
'接收数据包
Private Sub subReceive()
Dim i As Integer, ar As IAsyncResult
Dim b As Byte()
While ContinueReceive
ar = sck.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, Nothing, Me)
i = sck.EndReceive(ar)
ReDim b(i - 1)
Array.Copy(buffer, 0, b, 0, i)
RaiseEvent DataReceived(b, i)
System.Threading.Thread.Sleep(10)
End While
End Sub