2012-02-12 21 views
0

我想创建一个IP隔离器。这是我创建一个TCPtable所用的模板的一部分。我试图添加一个断开连接功能。但是,它不会断开连接。VB.NET IP隔离器:什么是SetTcpEntry断开的正确用法

Dim liste() = {"76.9.24.130" ... ... ...} 
    Dim pdwSize As Integer 
    Dim iRetVal As Integer 
    Dim i As Integer 
    Dim TcpTableRow As MIB_TCPROW 
    Dim pStructPointer As IntPtr = IntPtr.Zero 
    Dim iNumberOfStructures As Integer 
    ListView1.Items.Clear() 
    iRetVal = GetTcpTable(pStructPointer, pdwSize, 0) 
    pStructPointer = Marshal.AllocHGlobal(pdwSize) 
    iRetVal = GetTcpTable(pStructPointer, pdwSize, 0) 
    iNumberOfStructures = Math.Ceiling((pdwSize - 4)/Marshal.SizeOf(GetType(MIB_TCPROW))) 
    For i = 0 To iNumberOfStructures - 1 
     Dim pStructPointerTemp As IntPtr = New IntPtr(pStructPointer.ToInt32() + 4 + (i * Marshal.SizeOf(GetType(MIB_TCPROW)))) 
     TcpTableRow = New MIB_TCPROW() 
     With TcpTableRow 
      .dwLocalAddr = 0 
      .dwState = 0 
      .dwLocalPort = 0 
      .dwRemoteAddr = 0 
      .dwRemotePort = 0 
     End With 
     'Marshal.PtrToStructure(pStructPointerTemp, TcpTableRow) 
     TcpTableRow = CType(Marshal.PtrToStructure(pStructPointerTemp, GetType(MIB_TCPROW)), MIB_TCPROW) 
     ' Process each MIB_TCPROW here 
     'If Not ((Check1.CheckState = System.Windows.Forms.CheckState.Checked) And (GetIpFromLong(TcpTableRow.dwLocalAddr) = "0.0.0.0" Or GetIpFromLong(TcpTableRow.dwLocalAddr) = "127.0.0.1")) Then 
     If Not GetIpFromLong(TcpTableRow.dwRemoteAddr) = "127.0.0.1" And Not GetIpFromLong(TcpTableRow.dwRemoteAddr) = "0.0.0.0" Then 
      'Add the data to the ListView control 
      With TcpTableRow 
       Dim itemAdd As ListViewItem 
       itemAdd = ListView1.Items.Add(GetIpFromLong(.dwLocalAddr)) 
       itemAdd.SubItems.Add(CStr(GetTcpPortNumber(.dwLocalPort))) 
       itemAdd.SubItems.Add(GetIpFromLong(.dwRemoteAddr)) 
       itemAdd.SubItems.Add(CStr(GetTcpPortNumber(.dwRemotePort))) 
       itemAdd.SubItems.Add(GetState(.dwState)) 
      End With 
      '-------------- Kill Connection-------------- 
      If Array.IndexOf(liste, GetIpFromLong(TcpTableRow.dwRemoteAddr)) >= 0 Then 
       TcpTableRow.dwState = 12 
       SetTcpEntry(TcpTableRow) 
      End If 
     End If 
    Next 
+0

嗨,任何人有一个想法? – user670186 2012-02-20 15:49:43

回答

0

我没能解决,但发现用CurrPorts

Shell(Application.StartupPath & "\cports /close * * " & GetIpFromLong(TcpTableRow.dwRemoteAddr) & " " & GetTcpPortNumber(TcpTableRow.dwRemotePort)) 
0

我不知道一个替代解决方案,如果这是同样的情况或没有,但我用的是: session = New Socket(,,,)我的连接手段通过TCP PORT23和我的问题是,我也无法得到连接关闭由于某种原因。我确实尝试了上面的CurrPorts解决方法,但是我发现这并没有达到我的预期。相反,我正在使用TCPClient。

 Dim TCPConnection as TCPClient 'Init TCPConnect 

    Private Sub Connect(Byval inIP) 
     Dim PiP = IPAddress.Parse(inIP) 
     Dim iplocal As New System.Net.IPEndPoint(PiP, 23) 
     Try 
      TCPsession = New TcpClient 
      TCPsession.Client.Connect(ipLocal) 
     Catch 
     'On Error Do Nothing 
     End Try 
    End Sub 

    Private Sub Disconnect() 
     TCPsession.Client.Close() 
    End Sub 

此代码解决了我的问题,但我不确定这是否你甚至在谈论什么。

相关问题