Página 1 de 1

TCP no funciona compilado

Publicado: 07 Ene 2011, 12:42
por xapu
buenas, estos dias he estado haciendo una remoteshell usando TCP, corriendo la script va en todos mis ordenadores, pero una vez que la compilo deja de funcionar, no encuentra la conexion, pero tampoco da error.
hay alguna informacion sobre este error?

Re: TCP no funciona compilado

Publicado: 08 Ene 2011, 00:55
por Chefito
Ni idea chico. Puedes dejar los códigos y miramos que puede pasar.
Si no quieres dejar todo el código, deja solamente la parte de comunicación cliente-servidor que no te funciona al compilar y la miramos.

Saludos.

Re: TCP no funciona compilado

Publicado: 08 Ene 2011, 15:04
por xapu
servidor:

Código: Seleccionar todo

#include <GUIConstants.au3>
#include <Constants.au3>
	Dim $szIPADDRESS = "IP cliente"
	Dim $nPORT = 6667
	Dim $recv
	Dim $ConnectedSocket = -1
	Dim $comando
	TCPStartup()


	$MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

	If $MainSocket = -1 Then

	Do
		$MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

	Until $ConnectedSocket <> -1
	
	EndIf
	
	$foo = Run("cmd.exe" & " /c" & $comando, "c:/", @SW_SHOW, $STDERR_MERGED)

      While 1


		$comando = TCPRecv($ConnectedSocket, 2048)

		If @error Then ExitLoop

			If $recv <> "" Then StdinWrite($foo,$recv)
				
				While 1
					$line = StdoutRead($foo)
					If @error Then ExitLoop
					TCPSend($ConnectedSocket, $line)

				WEnd

				While 1
					$line = StderrRead($foo)
					If @error Then ExitLoop
					TCPSend($ConnectedSocket, $line)
				WEnd

	WEnd


cliente:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

TCPStartup()

$sock = TCPListen(@IPAddress1,6667)
$msock = -1
Do
	$msock = TCPAccept($sock)
Until $msock <> -1
remote_shell($msock)
Func remote_shell($sock)
	Local $line ,$sh_form ,$sh_edit ,$sh_input1 ,$sh_button1
	#Region ### START Koda GUI section ### Form=
	$sh_form = GUICreate("Shell remota con: "&SocketToIP($SHOCK), 675, 373, 192, 124)
	$sh_Edit = GUICtrlCreateEdit("", 8, 8, 657, 321)
	GUICtrlSetBkColor($sh_edit,0x000000)
	GUICtrlSetColor($sh_edit,0xFFFFFF)
	GUICtrlSetFont($sh_edit, 1, 200, 0, "Fixedsys")
	$sh_Input1 = GUICtrlCreateInput("", 8, 344, 577, 21)
	$sh_Button1 = GUICtrlCreateButton("send", 592, 342, 75, 25, $WS_GROUP)
	GUISetState(@SW_SHOW)
	#EndRegion ### END Koda GUI section ###
	Local $AccelKeys[1][2]=[["{Enter}", $sh_Button1]]
	GUISetAccelerators($AccelKeys,$sh_form)
	While 1
		$line = TCPRecv($sock,2048)
		If $line <> "" Then
		GUICtrlSetData($sh_edit,guictrlread($sh_edit)&$line)
		EndIf
		$nMsg = GUIGetMsg()
			Switch $nMsg
			Case $GUI_EVENT_CLOSE
					TCPSend($sock,"shfin.")
					GUIDelete($sh_form)
					ExitLoop
				Case $sh_button1
					If GUICtrlRead($sh_input1) = "cls" Then
						GUICtrlSetData($sh_edit,"")
					Else
						TCPSend($sock,guictrlread($sh_input1)&@CRLF)
					EndIf
				EndSwitch
	WEnd
EndFunc



Func SocketToIP($SHOCKET)
	Local $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

	Local $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
			"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
	If Not @error And $aRet[0] = 0 Then
		$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
		If Not @error Then $aRet = $aRet[0]
	Else
		$aRet = 0
	EndIf

	$sockaddr = 0

	Return $aRet
EndFunc
pero no me funciona nada compilado que tenga que ver con TCP en ningun ordenador que he provado... el cliente espera la conexion con el servidor, y el servidor intenta conectar con el cliente, pero el socket del servidor simpre devuelve -1
muchas gracias!

Re: TCP no funciona compilado

Publicado: 10 Ene 2011, 16:20
por BasicOs
Hola yo probaría en modo investigación:

1.- Desactivar el firewall del windows para todo.(así evitas que pare la comunicación IP)
2.- Trabajar en el mismo pc el server y el cliente, usando la dirección 127.0.0.1 o localhost.

Si sigue sin funcionar, usaría de la ayuda de autoit cogiendo un códigode ejemplo que hay allí mismo,
copiaría y pegaría los ejemplos que hay en los TCPListen() TCP ...
Salu22:)

Re: TCP no funciona compilado

Publicado: 11 Ene 2011, 02:30
por Chefito
Ante todo decir que creo que tienes algo liado el concepto del código del servidor y el de cliente. Yo creo que lo has hecho al revés.
Vamos a explicar brevemente el funcionamiento de estas partes:
Antes de nada, debe haber un programa servidor funcionando para que el/los programa/s cliente/s se pueda/n conectar a él. Por eso se tiene que crear inicialmente un programa servidor que primeramente escuche de una dirección (la del servidor) y un puerto (TCPListen) las posibles peticiones de conexión. Acabamos de crear un Socket de escucha. Después debes aceptar o no las conexiones (TCPAccept). Una vez que ya has conectado, queda recibir los datos que te envían (TCPRecv).
El cliente tiene que conectar con ese programa servidor. Para eso utiliza la función TCPConnect. Una vez que conecta, se pueden envíar los datos al servidor (TCPSend) los cuales recibirá.

Que decir tiene que un mismo programa puede hacer de cliente-servidor al mismo tiempo para tener una comunicación en ambos sentidos.

Si te das cuenta lo has hecho al revés. El código del cliente pertenece al del servidor y viceversa.
Además, he visto fallos en tus códigos.
En el código que has puesto como servidor, yo creo que te has liado un poquito y querías poner lo que viene en el ejemplo de la función TCPRecv:

Código: Seleccionar todo

    TCPStartup()

    ; Create a Listening "SOCKET".
    ;   Using your IP Address and Port 33891.
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

    ; If the Socket creation fails, exit.
    If $MainSocket = -1 Then Exit

    ;Wait for and Accept a connection
    ;==============================================
    Do
        $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

Y en el código del cliente deberías poner lo que viene en el ejemplo de TPCSend:

Código: Seleccionar todo

    TCPStartup()

    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1

    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
Es simplemente copiar, pegar y modificar los códigos cliente-servidor que te vienen como ejemplo en la ayuda, en las funciones que te digo arriba.

Aunque los hubieses puesto en su sitio, tus códigos siguen teniendo fallos:
Dim $szIPADDRESS = "IP cliente"
Aquí se pone la ip del servidor.

Código: Seleccionar todo

   $MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

   If $MainSocket = -1 Then

   Do
      $MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

   Until $ConnectedSocket <> -1
   
   EndIf
Que es esto? Si quieres volver a intentar conectar al servidor hazlo por ejemplo así y no te repitas. Además, te has equivocado al poner la condición de salida de la variable $ConnectedSocket, ya que esta nunca cambia en el bucle, cambia $MainSocket :

Código: Seleccionar todo

   Do
      $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT) 
      sleep(100)
   Until $ConnectedSocket > 0
En el código que has puesto como cliente falla la variable $SHOCK. Esta tiene que ser $sock:

Código: Seleccionar todo

$sh_form = GUICreate("Shell remota con: "&SocketToIP($SOCK), 675, 373, 192, 124)
Solamente he mirado el código inicial de conexión. Lo demás no, excepto lo que te dije anteriormente que me daba error y no podía ejecutarlo si no lo corregía.

Yo he probado código compilado de este tipo en 3 S.O. distintos y no me han dado ningún problema (xp sp3, win7 profesional 32 bits, win7 home 64 bit). También tengo que decir que he probado el cliente y el servidor en el mismo ordenador, ya que no los tengo conectados en red.
Si después de todo no te funciona, mira a ver los consejos de BasicOs, no sea que el servidor o algún ordenador tenga capada la entrada de datos por programas de este tipo, los cuales acceden por un puerto y tal.

Saludos.

Re: TCP no funciona compilado

Publicado: 16 Ene 2011, 21:38
por xapu
Chefito escribió:Ante todo decir que creo que tienes algo liado el concepto del código del servidor y el de cliente. Yo creo que lo has hecho al revés.
Vamos a explicar brevemente el funcionamiento de estas partes:
Antes de nada, debe haber un programa servidor funcionando para que el/los programa/s cliente/s se pueda/n conectar a él. Por eso se tiene que crear inicialmente un programa servidor que primeramente escuche de una dirección (la del servidor) y un puerto (TCPListen) las posibles peticiones de conexión. Acabamos de crear un Socket de escucha. Después debes aceptar o no las conexiones (TCPAccept). Una vez que ya has conectado, queda recibir los datos que te envían (TCPRecv).
El cliente tiene que conectar con ese programa servidor. Para eso utiliza la función TCPConnect. Una vez que conecta, se pueden envíar los datos al servidor (TCPSend) los cuales recibirá.

Que decir tiene que un mismo programa puede hacer de cliente-servidor al mismo tiempo para tener una comunicación en ambos sentidos.

Si te das cuenta lo has hecho al revés. El código del cliente pertenece al del servidor y viceversa.
Además, he visto fallos en tus códigos.
En el código que has puesto como servidor, yo creo que te has liado un poquito y querías poner lo que viene en el ejemplo de la función TCPRecv:

Código: Seleccionar todo

    TCPStartup()

    ; Create a Listening "SOCKET".
    ;   Using your IP Address and Port 33891.
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

    ; If the Socket creation fails, exit.
    If $MainSocket = -1 Then Exit

    ;Wait for and Accept a connection
    ;==============================================
    Do
        $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

Y en el código del cliente deberías poner lo que viene en el ejemplo de TPCSend:

Código: Seleccionar todo

    TCPStartup()

    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1

    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
Es simplemente copiar, pegar y modificar los códigos cliente-servidor que te vienen como ejemplo en la ayuda, en las funciones que te digo arriba.

Aunque los hubieses puesto en su sitio, tus códigos siguen teniendo fallos:
Dim $szIPADDRESS = "IP cliente"
Aquí se pone la ip del servidor.

Código: Seleccionar todo

   $MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

   If $MainSocket = -1 Then

   Do
      $MainSocket = TCPConnect($szIPADDRESS,$nPORT) 

   Until $ConnectedSocket <> -1
   
   EndIf
Que es esto? Si quieres volver a intentar conectar al servidor hazlo por ejemplo así y no te repitas. Además, te has equivocado al poner la condición de salida de la variable $ConnectedSocket, ya que esta nunca cambia en el bucle, cambia $MainSocket :

Código: Seleccionar todo

   Do
      $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT) 
      sleep(100)
   Until $ConnectedSocket > 0
En el código que has puesto como cliente falla la variable $SHOCK. Esta tiene que ser $sock:

Código: Seleccionar todo

$sh_form = GUICreate("Shell remota con: "&SocketToIP($SOCK), 675, 373, 192, 124)
Solamente he mirado el código inicial de conexión. Lo demás no, excepto lo que te dije anteriormente que me daba error y no podía ejecutarlo si no lo corregía.

Yo he probado código compilado de este tipo en 3 S.O. distintos y no me han dado ningún problema (xp sp3, win7 profesional 32 bits, win7 home 64 bit). También tengo que decir que he probado el cliente y el servidor en el mismo ordenador, ya que no los tengo conectados en red.
Si después de todo no te funciona, mira a ver los consejos de BasicOs, no sea que el servidor o algún ordenador tenga capada la entrada de datos por programas de este tipo, los cuales acceden por un puerto y tal.

Saludos.
los fallos tontos esos son por k el codigo realmente era mucho mas extenso... y como me parecia innecesario saque una parte del programa para ponerlo como ejemplo.
la conexion entre los pc´s realmente no es de cliente servidor, los dos son clientes... bueno es que es un rollo de explicar... si acabo algun dia el programa y soluciono el que no funcione despues de compilarlo lo suvire para que veais.
muchas gracias!

Re: TCP no funciona compilado

Publicado: 16 Ene 2011, 21:42
por xapu
BasicOs escribió:Hola yo probaría en modo investigación:

1.- Desactivar el firewall del windows para todo.(así evitas que pare la comunicación IP)
2.- Trabajar en el mismo pc el server y el cliente, usando la dirección 127.0.0.1 o localhost.

Si sigue sin funcionar, usaría de la ayuda de autoit cogiendo un códigode ejemplo que hay allí mismo,
copiaría y pegaría los ejemplos que hay en los TCPListen() TCP ...
Salu22:)
1- mi firewall siempre esta off XDD
2 - si!! eso es lo k mas me molesta... k en local funcione, pero cuando es en internet no va!!
yo ya no se que puede ser..
como solucion se me avia ocurrido acer un programa ke aga fileinstall(@tempdir) con el programa en .au3 y el autoit.exe y me lo ejecute...
no se k are al final :smt010
muchas gracias basicos

Re: TCP no funciona compilado

Publicado: 16 Ene 2011, 21:50
por BasicOs
xapu escribió: 1- mi firewall siempre esta off XDD
2 - si!! eso es lo k mas me molesta... k en local funcione, pero cuando es en internet no va!!
yo ya no se que puede ser..
como solucion se me avia ocurrido acer un programa ke aga fileinstall(@tempdir) con el programa en .au3 y el autoit.exe y me lo ejecute...
no se k are al final :smt010
muchas gracias basicos
Si 1 y 2, entonces es que tienes que
3.- probarlo en LAN entre dos pcs,
4.- Probarlo en Internet con las direcciones web repitiendo la configuración de la LAN, con IPS públicas en este caso (la del servidor porque la del cliente no se necesita especificar)
Salu22:)