Fix some bugs and add informe.md
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar> Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
This commit is contained in:
parent
9561b7cac9
commit
cf7a3e3f21
24
README.md
24
README.md
|
@ -27,7 +27,7 @@ make all
|
||||||
|
|
||||||
Ahora, tendrá dos ejecutables: `client` y `socks5d`.
|
Ahora, tendrá dos ejecutables: `client` y `socks5d`.
|
||||||
|
|
||||||
El servidor por defecto utilizará un _TOKEN_ que debe ser una `env` variable. Por ejemplo, puede configurar una mediante:
|
El servidor por defecto utilizará un _TOKEN_ que debe ser una `environment` variable. Por ejemplo, puede configurar una mediante:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export BPROXY_TOKEN=0x0FF1CEDEADB00B1E
|
export BPROXY_TOKEN=0x0FF1CEDEADB00B1E
|
||||||
|
@ -47,11 +47,13 @@ y en otra terminal
|
||||||
./client ${PARAMS}
|
./client ${PARAMS}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Debe notar que el server espera un token como el que se mencionó anteriormente (en formato hexadecimal) mientras que el cliente espera un número decimal (véase la siguiente sección para más información).
|
||||||
|
|
||||||
## Casos de uso <a name="casos-de-uso"></a>
|
## Casos de uso <a name="casos-de-uso"></a>
|
||||||
|
|
||||||
Se mostrarán dos casos típicos de uso del servidor.
|
Se mostrarán dos casos típicos de uso del servidor.
|
||||||
|
|
||||||
Aquí se tiene al servidor proxy corriendo en 127.0.0.1:1080 y se utiliza a este para conectarse a 192.168.10.120:110 (una PC en la misma subred corriendo un servidor POP3 local). Además, se está autenticando con el usuario `user:pass`.
|
Aquí se tiene al servidor proxy corriendo en `127.0.0.1:1080` y se utiliza a este para conectarse a `192.168.10.120:110` (una PC corriendo un servidor POP3). Además, se está autenticando con el usuario `user:pass`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./socks5d -u user:pass
|
./socks5d -u user:pass
|
||||||
|
@ -65,14 +67,24 @@ Por otro lado, aquí se usó `curl` para acceder a http://api.ipify.org mediante
|
||||||
curl -x socks5://user:pass@127.0.0.1:1080 http://api.ipify.org
|
curl -x socks5://user:pass@127.0.0.1:1080 http://api.ipify.org
|
||||||
```
|
```
|
||||||
|
|
||||||
En este caso se quiere obtener la cantidad de páginas de usuarios que hay en el servidor proxy, mediante -L se especifica la direccion IP del servidor de configuración (por defecto 127.0.0.1), con -P se especifica el puerto (por defecto 8080).
|
Ahora, se mostrará un caso de uso para el cliente de configuración.
|
||||||
Una vez que se obtiene la cantidad de páginas se le pide el listado de usuarios pertenecientes a la 2da página, en caso de que el servidor no cuente con usuarios suficientes para tener 2 páginas, imprimirá un error especificando que el valor pasado no es válido. En cambio, si se cuentan con usuarios suficientes se listarán separados por un '\n'
|
|
||||||
|
Se quiere obtener la cantidad de páginas de usuarios que hay en el servidor proxy, mediante -L se especifica la direccion IP del servidor de configuración (por defecto `127.0.0.1`), con -P se especifica el puerto (por defecto `8080`).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
export BPROXY_TOKEN=0x0FF1CEDEADB00B1E
|
||||||
|
./socks5d -u user:pass
|
||||||
./client 1148926835748244254 -L 192.168.10.119 -P 8100 -f
|
./client 1148926835748244254 -L 192.168.10.119 -P 8100 -f
|
||||||
|
```
|
||||||
|
|
||||||
|
Una vez que se obtiene la cantidad de páginas se le pide el listado de usuarios pertenecientes a la 2da página, en caso de que el servidor no cuente con usuarios suficientes para tener 2 páginas, imprimirá un error especificando que el valor pasado no es válido. En cambio, si se cuentan con usuarios suficientes se listarán separados por un '\n'.
|
||||||
|
|
||||||
|
```bash
|
||||||
./client 1148926835748244254 -L 192.168.10.119 -P 8100 -u 2
|
./client 1148926835748244254 -L 192.168.10.119 -P 8100 -u 2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note que `0x0FF1CEDEADB00B1E` (base 16) = `1148926835748244254` (base 10).
|
||||||
|
|
||||||
## Testeos <a name="tests"></a>
|
## Testeos <a name="tests"></a>
|
||||||
|
|
||||||
En orden de realizar un análisis estático del sistema usted debe tener instalado [cppcheck](http://cppcheck.net/) y [pvs-studio](https://pvs-studio.com/). Luego, puede correrlos con:
|
En orden de realizar un análisis estático del sistema usted debe tener instalado [cppcheck](http://cppcheck.net/) y [pvs-studio](https://pvs-studio.com/). Luego, puede correrlos con:
|
||||||
|
@ -87,6 +99,8 @@ Por último, si quiere hacer un análisis dinámico (usando [valgrind](https://v
|
||||||
valgrind ./socks5d
|
valgrind ./socks5d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Debe tener el cuidado de recompilarlo eliminando los flags de compilación `-fsanitize=address -fno-omit-frame-pointer`.
|
||||||
|
|
||||||
## Limpieza <a name="limpieza"></a>
|
## Limpieza <a name="limpieza"></a>
|
||||||
Si desea borrar los archivos creados luego de la compilación (y los testeos si se hubiesen corrido) debe correr:
|
Si desea borrar los archivos creados luego de la compilación (y los testeos si se hubiesen corrido) debe correr:
|
||||||
|
|
||||||
|
@ -95,7 +109,7 @@ make clean
|
||||||
```
|
```
|
||||||
|
|
||||||
## Documentación <a name="documentación"></a>
|
## Documentación <a name="documentación"></a>
|
||||||
Debe notar que el informe y el rfc del protocolo BCP se encuentran en la carpeta `docs/`.
|
Debe notar que el informe y el rfc del protocolo BCP se encuentran en la carpeta `docs/` (junto con el `man` de socks5d).
|
||||||
|
|
||||||
# Autores
|
# Autores
|
||||||
### Bottler:
|
### Bottler:
|
||||||
|
|
Binary file not shown.
10
src/args.c
10
src/args.c
|
@ -46,7 +46,7 @@ static void user(char * s, user_t * user) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void version(void) {
|
static void version(void) {
|
||||||
fprintf(stderr, "BProxy v1.0\nITBA Protocolos de Comunicación 2021/1 -- Group 7\nSee LICENSE.md\n");
|
fprintf(stderr, "BProxy v1.0\nITBA Protocolos de Comunicación 2022/1C -- Group 7\nSee LICENSE.md\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(const char *progname) {
|
static void usage(const char *progname) {
|
||||||
|
@ -60,7 +60,7 @@ static void usage(const char *progname) {
|
||||||
" -u <name>:<pass> Username and password of proxy user. Up to 1024.\n"
|
" -u <name>:<pass> Username and password of proxy user. Up to 1024.\n"
|
||||||
" -v Prints version information.\n\n",
|
" -v Prints version information.\n\n",
|
||||||
progname);
|
progname);
|
||||||
exit(1);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_logo() {
|
static void print_logo() {
|
||||||
|
@ -81,8 +81,6 @@ static void print_logo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_args(const int argc, char ** argv, struct socks5args * args) {
|
void parse_args(const int argc, char ** argv, struct socks5args * args) {
|
||||||
print_logo();
|
|
||||||
|
|
||||||
memset(args, 0, sizeof(*args));
|
memset(args, 0, sizeof(*args));
|
||||||
|
|
||||||
args->socks_addr = NULL;
|
args->socks_addr = NULL;
|
||||||
|
@ -127,7 +125,7 @@ void parse_args(const int argc, char ** argv, struct socks5args * args) {
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
version();
|
version();
|
||||||
exit(0);
|
exit(EXIT_SUCCESS);
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Unknown argument %d.\n", c);
|
fprintf(stderr, "Unknown argument %d.\n", c);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -144,4 +142,6 @@ void parse_args(const int argc, char ** argv, struct socks5args * args) {
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_logo();
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ static unsigned short get_port(const char *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void version(void) {
|
static void version(void) {
|
||||||
fprintf(stdout, "BProxy v1.0\nITBA Protocolos de Comunicación 2021/1 -- Group 7\nSee LICENSE.md\n");
|
fprintf(stdout, "BCP Client v1.0\nITBA Protocolos de Comunicación 2022/1C -- Group 7\nSee LICENSE.md\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(const char * progname) {
|
static void usage(const char * progname) {
|
||||||
|
@ -59,10 +59,10 @@ static void usage(const char * progname) {
|
||||||
" [TOKEN] -a Get proxy authentication status\n"
|
" [TOKEN] -a Get proxy authentication status\n"
|
||||||
" [TOKEN] -L <conf addr> Address of management service.\n"
|
" [TOKEN] -L <conf addr> Address of management service.\n"
|
||||||
" [TOKEN] -P <conf port> Port of management service.\n"
|
" [TOKEN] -P <conf port> Port of management service.\n"
|
||||||
" [TOKEN] -A <state> Modify proxy authentication status\n"
|
" [TOKEN] -A <state> Modify proxy authentication status\n\n"
|
||||||
"Where TOKEN is an 8-byte unsigned integer\n\n",
|
"Where TOKEN is an 8-byte unsigned decimal integer.\n\n",
|
||||||
progname);
|
progname);
|
||||||
exit(1);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t parse_args(int argc, char ** argv, uint8_t * buffer, char ** address, unsigned short * port) {
|
uint8_t parse_args(int argc, char ** argv, uint8_t * buffer, char ** address, unsigned short * port) {
|
||||||
|
|
21
src/server.c
21
src/server.c
|
@ -35,19 +35,9 @@ static struct socks5args * args;
|
||||||
uint64_t config_token;
|
uint64_t config_token;
|
||||||
|
|
||||||
int main(int argc, char ** argv) {
|
int main(int argc, char ** argv) {
|
||||||
char * token = getenv("BPROXY_TOKEN");
|
|
||||||
if (token != NULL) {
|
|
||||||
config_token = strtoul(token, NULL, 16);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "No token found. Please see README.md\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
args = malloc(sizeof(struct socks5args));
|
args = malloc(sizeof(struct socks5args));
|
||||||
parse_args(argc, argv, args);
|
parse_args(argc, argv, args);
|
||||||
|
|
||||||
close(STDIN_FILENO);
|
|
||||||
|
|
||||||
const char *err_msg = NULL;
|
const char *err_msg = NULL;
|
||||||
selector_status ss = SELECTOR_SUCCESS;
|
selector_status ss = SELECTOR_SUCCESS;
|
||||||
fd_selector selector = NULL;
|
fd_selector selector = NULL;
|
||||||
|
@ -58,6 +48,17 @@ int main(int argc, char ** argv) {
|
||||||
int udp_server = -1;
|
int udp_server = -1;
|
||||||
int udp_server_ipv6 = -1;
|
int udp_server_ipv6 = -1;
|
||||||
|
|
||||||
|
char * token = getenv("BPROXY_TOKEN");
|
||||||
|
if (token != NULL) {
|
||||||
|
config_token = strtoul(token, NULL, 16);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
err_msg = "No token found. Please see README.md";
|
||||||
|
goto finally;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(STDIN_FILENO);
|
||||||
|
|
||||||
unsigned char buf[sizeof(struct in6_addr)];
|
unsigned char buf[sizeof(struct in6_addr)];
|
||||||
int domain = -1;
|
int domain = -1;
|
||||||
if (args->socks_addr != NULL) {
|
if (args->socks_addr != NULL) {
|
||||||
|
|
Loading…
Reference in New Issue