Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kaxperday

#321
Hombre cosas tan cantosas como una empresa de electrónica distribuyendo copias piratas, que seguramente las vendería incluso, me parece bien que sea perseguida por microsoft por motivos evidentes.

Pero lo que no debería hacer microsoft sería perseguir las copias piratas de todos los usuarios que usamos windows, que bien podría hacerlo si quisiera y bloqueárnoslo o incluso denunciarnos a las autoridades locales, pero si lo hiciera sería el fin de su sistema operativo, la mayoría de la gente que usa windows tiene programas piratas, si windows se los elimina o incluso los denuncia, ¿qué ocurriría?. Ya nos veríamos todos en linux.

Microsoft por su bien no debería perseguir y eliminar los programas piratas, permitirlas genera perdidas económicas, pero impedirlas generaría la ida masiva de clientes que usan su SO.

Saludos.
#322
meto ping al tema, volvemos a vernos las caras, necesito calcular el ip checksum y no hay manera, por más códigos que veo ninguno coincide con el checksum del paquete, he probado muchos, pero el que más se ha aproximado fue el que traté de implementar hace tiempo, cuando creé este hilo:

Código (cpp) [Seleccionar]
//http://realtimecollisiondetection.net/blog/?p=78
u_char* checksum_ip(u_char* datos, int tamaño)
{
u_char *checksum = new u_char[2]();
uint16_t sumando = 0, sumanda = 0;
bitset<16> salida;
for (int i = 14; i < 34; i++)
{
if (i != 24 && i != 25)
{
printf("i = %d, i + 1 = %d -> ", i, i + 1);
sumanda = (uint16_t)((datos[i] << 8) + datos[i + 1]);//no puede haber acarreo de bit ??
salida = sumanda;
cout << salida << endl;
sumando += sumanda;
if (sumando & 0xFFFF0000)
{
sumando &= 0xFFFF;
sumando++;
}
i++;
}
}
sumando = sumando +2;
sumando = sumando & 0xFFFF;
sumando = ~sumando;
salida = sumanda;
cout << salida << endl;
checksum[0] = (sumando >> 8) & 0x00FF;
checksum[1] = sumando & 0x00FF;
printf("\n%x%x", checksum[0], checksum[1]);
system("pause");
return checksum;
}


Salidas original/calculado:

Citar869a/869d
869a/8699
7c6f/7fb4
8699/8698
74b/740

Evidentemente está mal, ¿que puede fallar? me iré pasando a ver si puedo solucionarlo.

¿Alguien me puede decir porque este código no funciona? , debería de hacerlo he probado con todo.

Saludos, toda ayuda es bienvenida.

Edito: Si sumo 2 obtengo lo mismo que en el ejemplo de aqui:

http://www.arcesio.net/checksum/checksumIP.html

El mismo resultado final, sin embargo no funciona con los paquetes, pero si sumo 3 el 70% de los checksum de los paquetes coinciden, ¿que puede faltar?

Resuelto, conseguí detectar si había acarreo de byte y lo calcule satisfactoriamente.

Saludos.
#323
Hola elektro, gracias por las respuesta.

Por lo visto tu solución pasa por instalar IIS, y probar si funciona levantando un server en windows, algo que no veo como solución pues, ¿qué lograríamos dato000? (quizás lo entendió mal), los datos seguirían saliendo hacia el router de igual forma, necesitamos el puente que vaya de un puerto a otro.

Como bien dices elektro, hay una forma de automatizar el proceso, sin tener que pasar por el panel de control..., que ya la encontré en stack overflow, y sí usa dism.exe:

http://stackoverflow.com/questions/16079030/better-way-to-install-iis7-programmatically

Pero deberas, eso levantaría un servidor en este caso HTTP, ¿y ahora que hemos ganado?.

Había pensado en usar winpcap para detectar los paquetes salientes con puerto de destino 80, y eliminarlos o destruirlos de alguna manera, pero cuando los detecta ya han sido eliminados o están en proceso. ¿No se puede hacer nada con sockets?, solo habría que bindear un puerto como el 1000 escuchando mensajes entrantes, entonces desviamos los paquetes salientes por puerto 80 al puerto 1000, y vuala. Pero no se puede sin esa redirección, y como puse en el primer mensaje esas no parecen funcionar :////.

Saludos, a ver como me las apaño, parece que windows tiene esto bastante impenetrable. Y quiero montarme el server proxy. Si hay apps como intercepter-ng lo hacen, será porque han conseguido crear ese puente ¿no?, la idea final es implementar un sslstrip, pero primero tengo que hacer esto para acceder a los paquetes y modificarlos y así poderlos reenviar.

Saludos!!.

Edito: Siempre cabe la posibilidad muy sufrida que no se me pasa aún por la cabeza de hacer tu el ip fordwarding en vez de que lo haga windows, de esta manera podremos modificar los paquetes de las victimas de la red, pero no los nuestros, y habría que implementar muchos paquetes, algo que paso por ahora, pero si no hay otra posibilidad habrá que plantearlo.

No me digan que no molaría hacer esto

Bueno, aquí llega la conclusión final y la edición delicatesse, tras probar el intercepter-ng en una máquina virtual para ver como hace funcionar el sslstrip me he dado cuenta que el valor SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\IPEnableRouter está todo el tiempo a 0, a pesar de que tenía selecionado el ip fordwarding, eso quiere decir que el propio programa es el que hace el IP FORDWARDING, y no le piden a windows que lo haga, pues una vez lo activemos en el no hay manera de detenerlo como estamos viendo, luego habrá que implementar una manera para redirigir los paquetes ip que nos llegan de los hosts a su destino, y viceversa, de esta manera si tendremos acceso a los paquetes, pero son muchos (https://en.wikipedia.org/wiki/Internet_Protocol) y supongo que no podremos aplicar el mismo algoritmo de modificación y redireción a todos, luego estoy bastante jodido, pero ¿y si SI?, ya lo descubriré, pero la solución con windows no pasa como con linux de hacer mitm iptables y servidor sslstrip, sino que es mitm hacer de proxy ip para los hosts (tu no podrías incluirte ojo), y sslstrip.

Ojalá hubiera otra manera, redirigiendo el tráfico de un puerto a otro, pero parece que no encuentro nada, he probado y preguntado, supongo que solo queda la vía de redirigir los paquetes ip manualmente, si alguien tiene otra solución al problema, será bien recibida, doy el tema por zanjado.

Bueno, en los HTTP puedo apreciar que cambia el checksum, el tiempo de vida, y las direcciones mac origen y destino, si es solo eso para todos, será fiesta, y algo me hace pensar que si :**

SOLUCIONADO, NO ACTIVAR IP FORDWARDING, RECOGER PAQUETES IP DE LOS HOSTS CON WINPCAP, MODIFICAR MACS DE ORIGEN Y DESTINO, MODIFICAR TTL Y MODIFICAR EL CHEKSUM, ALE.

Saludos.
#324
jajaja pues tienes razon he puesto casi lo mismo este hilo ya se me habia olvidado  ;D ;D :huh: :huh:
#325
Buenas esta respuesta ya me gusta más, acabo de mirar un poco eso del "Internet Information Services" y parece ser una posible solución, aquí dice como activarlo:

https://msdn.microsoft.com/es-es/library/ms181052(v=vs.80).aspx

Pero, ¿no se puede instalar desde C++ de manera automática, modificando algún registro... etc..?, de todas formas ¿activando el IIS es la única manera de hacer lo que propongo o con netsh se puede hacer?, ya hablaré con elektro a ver si sabe algo. De todas formas, estaría bien que me contaras algo del ISS, una vez activado lo que habría que hacer, ¿eso ya permitiría redirigir el tráfico HTTP con el netsh?.

Visual studio ya lo conozco bien, lo estoy programando en C++ sobre visual studio, y la idea es hacer un HTTP Proxy entre mi ordenador y el router, para captar los datos que salen modificarlos y lanzarlos al router luego recibir la respuesta del router y mandarla al ordenador, un simple proxy. Quiero decir al ordenador "los paquetes que vayan al puerto 80 envialos al puerto 8080", allí tendré un servidor esperando y los recogerá y mandará peticiones a los servidores web haciendo de cliente y luego traerá las respuestas, y las reenviará.

Pero el objetivo no es probarlo, es crear una aplicación, y no pienso poner "vaya al panel de control, vaya a agregar o quitar programas, pulse activar IIS...", debe de ser doble click y que el programa lo haga todo.

Lo del router, pues claro se podría hacer sobre router, pero no sería necesario llegar allí además de que no sería una buena solución, porque dependería de routers, simplemente es decirle a windows, los paquetes que vayan al router con puerto 80 me los pasas a este puerto de esta ip, en vez de al router, la idea es muy simple, la implementación casi inexistente.

Saludos.

Edito:

CitarAhora
Lo que necesitas es configurar correctamente IIS, para configurar correctamente el servidor y que reciba peticiones en determinado puerto, por ejemplo para que escuche:

No creo que esa sea la solución, con el IIS lo que hacemos es crear un servidor, de lo que queramos HTTP, FTP, etc. Pero ¿que tiene que ver eso con controlar los datos salientes del ordenador?, ¿acaso iptables no es software?.

Lo mejor que tengo ahora es esto: Rinetd al descargar viene con el codigo fuente pero no se si funcionará, preferiría otra manera antes de llegar a eso.
#326
Cita de: Randomize en 19 Septiembre 2015, 13:17 PM
Deberías haberlo puesto en redes...


Moderador global, moderador global, modera, please!

oki, de todas formas también tiene que ver mucho con windows:

Con programas externos se podría hacer como pone aquí:

http://netsec.ws/?p=272

Pero eso sería lo último

Si se puedieran matar paquetes con winpcap para que no llegaran a su destino, podríamos leerlos y si son HTTP eliminarlos y mandarlos modificados, pero no se podrá..
#327
Hola, básicamente quiero que todos los paquetes salientes hacia el router con destino puerto 80 sean redirigidos hacia mí (localhost) y el puerto escogido como por ejemplo el 10000, hacer este comando pero para windows:

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>

Pero probando con netsh, lo más parecido que encuentro es esto:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.0.156 connectport=10000 connectaddress=192.168.0.156

Que se supone que redirige los paquetes que van a puerto 80 con destino cualquiera, hacia mi ip en la red, pero a pesar de hacerlo las páginas cargan y tengo conexión luego no redirige puesto que llega al router y salen, ¿que puedo hacer?.

Saludos.

La investigación apunta a: https://social.technet.microsoft.com/Forums/windows/en-US/6be8d1f0-f01b-47cf-beae-4d2cfc9c4111/redirect-all-local-port-80-traffic-to-remote-proxy-server?forum=w7itpronetworking

https://technet.microsoft.com/es-es/library/cc731131(v=ws.10).aspx

Con esto no crea ningún servidor proxy y todas páginas cargan por igual:

set proxy="http=myproxy:80" bypass-list="*.com"

No hay manera.. ¿?

C:\Users\cabra>netsh interface portproxy show all

Escuchar en ipv4:       Conectar a ipv4:

Dirección       Puerto      Dirección       Puerto
--------------- ----------  --------------- ----------
localhost       80          localhost       123


Estoy probando con wireshark filtrando los puertos a los que redirijo y no llega ningun paquete, PUTO WINDOWS! :*****

Recomiendo está página para hacer pruebas:

http://raunomagi.blogspot.com.es/2012/05/port-forwarding-on-windows-computers.html

Interesante, he probado esto:

C:\WINDOWS\system32>netsh interface portproxy add v4tov4 listenport=80 listenaddress=localhost connectport=10000 connectaddress=localhost


C:\WINDOWS\system32>netsh interface portproxy show all

Escuchar en ipv4:       Conectar a ipv4:

Dirección       Puerto      Dirección       Puerto
--------------- ----------  --------------- ----------
localhost       80          localhost       10000


Y al conectar con un cliente en mi puerto 80 funcionaba, lo que hace es establecer un servidor en puerto 80 para conexiones de puerto 10000? Esto no es port fordwarding!, bueno seguiré probando a ver si comprendo un poco más.

.. http://stackoverflow.com/questions/24646165/netsh-port-forwarding-from-local-port-to-local-port-not-working

Todo esto lo que hace es modificar la entrada hacia el pc no la salida, lo que hace crea un server en un puerto escuchando, y redirige a otro puerto, lo que busco es que redirija la salida hacia mi, de manera que no habrá paquetes que salgan hacia el router, pero parece que no es el camino.
#328
Cita de: ivancea96 en 18 Septiembre 2015, 21:08 PM
Código (cpp) [Seleccionar]
::bind();

Gracias grande!, esto es lo que tengo hasta ahora:

Código (cpp) [Seleccionar]
void servidor_HTTP(volatile bool *on_sslstrip)
{
WSADATA wsa;
string contenido;
sockaddr_in dir_servidor;
int s_servidor;

WSAStartup(MAKEWORD(2, 0), &wsa);

while (*on_sslstrip){
if ((s_servidor = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
WSACleanup();
Sleep(20000);
continue;
}
else{
dir_servidor.sin_family = AF_INET;
dir_servidor.sin_addr.s_addr = inet_addr("127.0.0.1");
dir_servidor.sin_port = htons(80);

if (::bind(s_servidor, (struct sockaddr *)&dir_servidor, sizeof(dir_servidor)) == SOCKET_ERROR){
closesocket(s_servidor);
WSACleanup();
Sleep(20000);
continue;
}

sockaddr_in dir_cliente;

while (*on_sslstrip){
int tam = sizeof(dir_cliente);
int s_client = accept(s_servidor, (struct sockaddr *)&dir_cliente, &tam);
if (s_client == INVALID_SOCKET){//SOCKET_ERROR
printf("accept() failed: %d\n", WSAGetLastError());
printf("error");
break;
}
printf("Accepted client: %s:%d\n",
inet_ntoa(dir_cliente.sin_addr), ntohs(dir_cliente.sin_port));

}
}
}
}


Pero me da error, y me sale a la primera iteracion del segundo bucle, la idea recuerdo que es escuchar peticiones de salida en puerto 80 y recojer paquetes como por ejemplo un paquete HTTP, lo primero es acceder a esos paquetes, luego los redirigiría de puerto y haría lo mismo en el otro puerto, entonces tengo la esperanza de que el sistema no pueda hacer conexiones http ni por el puerto 80 puesto que redirigi el puerto, y entonces accedería a los paquetes y los mandaría a los servidores modificandolos y los regresaría a los clientes correspondientes de los paquetes.

Pero ahora estamos por la parte de recoger esos paquetes http o no que usen puerto 80.

Saludos y gracias.

CitarWSAEINVAL
10022
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

Buenas, lo que creaba antes era un servidor en el puerto 80 no era lo correcto, he probado con un cliente que trata de conectar a un puerto de nuestro ordenador para sacar los paquetes aquí el code:

Código (cpp) [Seleccionar]
string cliente_HTTP()
{
WSADATA wsa;
string contenido;
sockaddr_in dir;
int sock;

WSAStartup(MAKEWORD(2, 0), &wsa);

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
WSACleanup();
return "";
}
else{
dir.sin_family = AF_INET;
dir.sin_port = htons(80);
dir.sin_addr.s_addr = htonl(INADDR_LOOPBACK);

if (connect(sock, (struct sockaddr*)&dir, sizeof(dir)) == SOCKET_ERROR){
closesocket(sock);
WSACleanup();
cout << "bad";
return "";
}
else{
cout << "Connected to " << inet_ntoa(dir.sin_addr) << "!" << endl;
cout << "hi";
char *respuesta = new char[1000]();
recv(sock, respuesta, 1000, 0);
closesocket(sock);
WSACleanup();
return string(respuesta);
}
}
}


Problema, que da conection refused al hacer el connect(), tiene sentido, pues no podemos conectar a un puerto 80, pues lo tenemos cerrado no se puede conectar, si lo hace si ponemos la ip de google. ¿como entonces accedemos a los paquetes salientes de nuestro ordenador??

Supongo que habrá que buscar esto para windows:

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>
#329
ojj acabo de remover de la cabecera el using namespace std; y ya funciona, vamos que hay 2 funciones "bind()", dpm windows XD. ¿como puedo hacerlo con el namespace std? ¿se puede o no?

Saludos.
#330
Cita de: ivancea96 en 18 Septiembre 2015, 20:22 PM
Código (cpp) [Seleccionar]
std::bind
Eso es una función de C++11, que no tiene que ver con los sockets de Windows.

Sii ese es el problema que tengo con bind, que no devuelve un puntero ni "bind", ni "std:bind", no hay manera de llamar a ese bind que tiene que ver con los sockets de windows, ¿alguna idea de como llamar a la de los sockets?.

Saludos y gracias.