Cerrar un puerto, se puede?

Iniciado por barzata, 19 Octubre 2010, 05:24 AM

0 Miembros y 1 Visitante están viendo este tema.

barzata

Hola, es muy dificil bloquear un puerto que ya conozco con winsock o algo asi?? o alguna manera de que no le lllegue nada a ese puerto. Es para evitar que funcione una aplicacion que sé que funciona en el puerto tal.

Gracias! ;D

BlackZeroX

.
Si, es posible usa el buscador puble dicho codigo hace ya como 3 años atras!¡.

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Elemental Code

Bajo la regla de que dos apps no pueden usar el mismo puerto al mismo momento se me ocurre algo muuuuuuy bol** pero que capas que anda.

pon algo a andar en el puerto que quieras
un winsock que se mande 1 de data para aca y para alla

ocupa el puerto y clin caja.

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

BlackZeroX

.
Solo aplica para escuchas, no se puede escuhcar mas de 1 instancia por puerto, pero SI se puede escuchar y conectar envarias instancias por puerto....

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

.
Hace mucho que lo hice... aun no lo he mejorado te pongo tal cual esta en otros post.
.
Código (Vb) [Seleccionar]


'
'   /////////////////////////////////////////////////////////////
'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
'   //                                                         //
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
'   // no se eliminen los creditos originales de este codigo   //
'   // No importando que sea modificado/editado o engrandecido //
'   // o achicado, si es en base a este codigo                 //
'   /////////////////////////////////////////////////////////////

Option Explicit

Enum StadosPort
  UNKNOWN = 0
  CLOSED = 1
  LISTENING = 2
  SYN_SENT = 3
  SYN_RCVD = 4
  ESTABLISHED = 5
  FIN_WAIT1 = 6
  FIN_WAIT2 = 7
  CLOSE_WAIT = 8
  CLOSING = 9
  LAST_ACK = 10
  TIME_WAIT = 11
  DELETE_TCB = 12
End Enum
Type MIB_TCPROW
  dwState As StadosPort
  dwLocalAddr As Long
  dwLocalPort As Long
  dwRemoteAddr As Long
  dwRemotePort As Long
End Type
Type MIB_TCPTABLE
  dwNumEntries As Long
  table(100) As MIB_TCPROW
End Type
Public MIB_TCPTABLE As MIB_TCPTABLE
Public Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
Public Declare Function SetTcpEntry Lib "IPhlpAPI" (pTcpRow As MIB_TCPROW) As Long 'This is used to close an open port.
Public Declare Function ntohs Lib "WSOCK32.DLL" (ByVal netshort As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
'Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Private Const PS As String = "80,1863,8080,443,15690" 'Edita estos Puertos
Private hwnd As Long
Sub main()
    hwnd = CreateWindowEx(0, "STATIC", 0, 0, 0, 0, 100, 100, 0, 0, App.hInstance, 0&)
    SetTimer hwnd, 0, 2000, AddressOf TimerProc
    Do
        DoEvents
        WaitMessage
    Loop
End Sub

Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Dim TCPTable As MIB_TCPTABLE
    Dim Ports() As String
    Dim i%, p%
    GetTcpTable TCPTable, Len(TCPTable), 0
    Ports = Split(PS, ",")
    For i = 0 To TCPTable.dwNumEntries - 1
        For p = 0 To UBound(Ports) - 1
            If Ports(p) = ntohs(TCPTable.table(i).dwRemotePort) Then
                GoTo Salto:
            ElseIf (p = Val(UBound(Ports) - 1)) Then
                TCPTable.table(i).dwState = DELETE_TCB
                SetTcpEntry TCPTable.table(i)
                Debug.Print ntohs(TCPTable.table(i).dwRemotePort)
                GoTo Salto:
            End If
        Next p
Salto:
    Next i
End Sub

The Dark Shadow is my passion.

barzata

faa no te caso una de todo eso jaja, voy a tener que estudiar el tema pense que era mas facil, una pregunta mas, usan el api de winsock porque con el control que viene en el VB no te deja hacer mucho? o por que razon?
Gracias muchachos

BlackZeroX

#6
.
En el codigo que te puse no es nada del Winsock es solo el registro TCP/IUp del Sistema. solo se manipula esta estructura y con eso se hace todo... con u n Hook al api quedaria mas chulo el codigo... el codigo asi como te lo puse tiene fugaz de memoria, y cosas ques epueden obviar pero bueno!¡.

y se usan las apis del winsock solamente para crear Sock's Tipo RAW y para quitar dependencias a los programas mas que nada, o por simplisidad!¡.

Dulces Lunas!¡.
The Dark Shadow is my passion.

barzata

Cita de: BlackZeroX▓▓▒▒░░ en 20 Octubre 2010, 04:36 AM
.
En el codigo que te puse no es nada del Winsock es solo el registro TCP/IUp del Sistema. solo se manipula esta estructura y con eso se hace todo... con u n Hook al api quedaria mas chulo el codigo... el codigo asi como te lo puse tiene fugaz de memoria, y cosas ques epueden obviar pero bueno!¡.

y se usan las apis del winsock solamente para crear Sock's Tipo RAW y para quitar dependencias a los programas mas que nada, o por simplisidad!¡.

Dulces Lunas!¡.

gracias maestro, lo voy a estudiar!!

barzata

Cita de: barzata en 20 Octubre 2010, 04:44 AM
Cita de: BlackZeroX▓▓▒▒░░ en 20 Octubre 2010, 04:36 AM
.
En el codigo que te puse no es nada del Winsock es solo el registro TCP/IUp del Sistema. solo se manipula esta estructura y con eso se hace todo... con u n Hook al api quedaria mas chulo el codigo... el codigo asi como te lo puse tiene fugaz de memoria, y cosas ques epueden obviar pero bueno!¡.

y se usan las apis del winsock solamente para crear Sock's Tipo RAW y para quitar dependencias a los programas mas que nada, o por simplisidad!¡.

Dulces Lunas!¡.

gracias maestro, lo voy a estudiar!!

Molesto otra vez, creo entender la logica del codigo, supongo q el puerto lo cierra en las lineas:
TCPTable.table(i).dwState = DELETE_TCB
                SetTcpEntry TCPTable.table(i)

mi pregunta es, que le deberia cambiar para volver a abrir el mismo puerto q cerre?


BlackZeroX

.
pues eso es para CERRAR CUALQUIER puerto que desees de cualquier puerto, y esactamente ashy solo se pone el estado... pero en si aun hay no se cierra se cierra hasta que se pasa la estructura ya configurada en la api SetTcpEntry cuando se pasa la estrucra a esta api se actualiza la informacion]!¡.

Se me ocurre que el programa que abrio el puerto debera de volver a abrirlo den su forma habitual... o quisas tambien solo cambia el estado... no es gran cosas hay trae una numeracion de los estados disponibles de los Socket.

Ducle Lunas!¡.
The Dark Shadow is my passion.