0

IP断路器を作成しようとしています。これは、TCPtableを作成するために私が取ったテンプレートの一部です。切断機能を追加しようとしていました。ただし、切断されません。

    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
4

2 に答える 2

0

私はそれを解決できませんでしたが、CurrPortsを使用して別の解決策を見つけました

 Shell(Application.StartupPath & "\cports /close * * " & GetIpFromLong(TcpTableRow.dwRemoteAddr) & " " & GetTcpPortNumber(TcpTableRow.dwRemotePort))
于 2012-02-23T04:36:42.960 に答える
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

このコードは私の問題を解決しましたが、それがあなたがどこで話しているのかさえわかりません。

于 2012-10-04T20:01:36.140 に答える