updated SPA over HTTP packets to always begin the a slash right after the GET string, updated to print SPA packets over HTTP to stderr in test/verbose mode

git-svn-id: file:///home/mbr/svn/fwknop/trunk@134 510a4753-2344-4c79-9c09-4d669213fbeb
This commit is contained in:
Michael Rash
2009-08-11 03:11:57 +00:00
parent 1781e9e758
commit 768606906e
2 changed files with 63 additions and 28 deletions

View File

@@ -270,26 +270,22 @@ main(int argc, char **argv)
if (options.verbose)
dump_transmit_options(&options);
/* If not in test mode, send the SPA data across the wire with a
* protocol/port specified on the command line (default is UDP/62201).
* Otherwise, run through a decode cycle (--DSS XXX: This test/decode
* portion should be moved elsewhere).
*/
if (!options.test)
res = send_spa_packet(ctx, &options);
if(res < 0)
{
res = send_spa_packet(ctx, &options);
if(res < 0)
{
fprintf(stderr, "[*] send_spa_packet: packet not sent.\n");
return(EXIT_FAILURE);
}
else
{
if(options.verbose)
fprintf(stderr, "[+] send_spa_packet: bytes sent: %i\n", res);
}
fprintf(stderr, "[*] send_spa_packet: packet not sent.\n");
return(EXIT_FAILURE);
}
else
{
if(options.verbose)
fprintf(stderr, "[+] send_spa_packet: bytes sent: %i\n", res);
}
/* Run through a decode cycle in test mode (--DSS XXX: This test/decode
* portion should be moved elsewhere).
*/
if (options.test)
{
/************** Decoding now *****************/

View File

@@ -74,10 +74,17 @@ static int is_ip(char *str)
int
send_spa_packet_tcp_or_udp(char *spa_data, int sd_len, fko_cli_options_t *options)
{
int sock, res, error;
int sock, res=0, error;
struct addrinfo *result, *rp, hints;
char port_str[MAX_PORT_STR_LEN];
if (options->test)
{
fprintf(stderr,
"[+] test mode enabled, SPA packet not actually sent.\n");
return res;
}
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
@@ -165,7 +172,7 @@ send_spa_packet_tcp_raw(char *spa_data, int sd_len, struct sockaddr_in *saddr,
"[*] send_spa_packet_tcp_raw: raw packets are not yet supported.\n");
return(-1);
#else
int sock, res;
int sock, res = 0;
char pkt_data[2048] = {0}; /* Should be enough for our purposes */
struct iphdr *iph = (struct iphdr *) pkt_data;
@@ -178,6 +185,13 @@ send_spa_packet_tcp_raw(char *spa_data, int sd_len, struct sockaddr_in *saddr,
int one = 1;
const int *so_val = &one;
if (options->test)
{
fprintf(stderr,
"[+] test mode enabled, SPA packet not actually sent.\n");
return res;
}
sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);
if (sock < 0)
{
@@ -269,7 +283,7 @@ send_spa_packet_icmp(char *spa_data, int sd_len, struct sockaddr_in *saddr,
fprintf(stderr, "[*] send_spa_packet_icmp: raw packets are not yet supported.\n");
return(-1);
#else
int res;
int res = 0, sock;
char pkt_data[2048] = {0};
struct iphdr *iph = (struct iphdr *) pkt_data;
@@ -282,7 +296,14 @@ send_spa_packet_icmp(char *spa_data, int sd_len, struct sockaddr_in *saddr,
int one = 1;
const int *so_val = &one;
int sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);
if (options->test)
{
fprintf(stderr,
"[+] test mode enabled, SPA packet not actually sent.\n");
return res;
}
sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);
if (sock < 0)
{
@@ -353,30 +374,48 @@ send_spa_packet_icmp(char *spa_data, int sd_len, struct sockaddr_in *saddr,
int
send_spa_packet_http(char *spa_data, int sd_len, fko_cli_options_t *options)
{
char http_buf[HTTP_MAX_REQUEST_LEN];
char http_buf[HTTP_MAX_REQUEST_LEN], *spa_data_copy = NULL;
int i;
spa_data_copy = malloc(sd_len+1);
if (spa_data_copy == NULL)
{
exit(EXIT_FAILURE);
}
memcpy(spa_data_copy, spa_data, sd_len+1);
/* change "+" chars to "-", and "/" to "_" for HTTP requests (the server
* side will translate these back before decrypting) */
for (i=0; i < sd_len; i++) {
if (spa_data[i] == '+') {
spa_data[i] = '-';
if (spa_data_copy[i] == '+') {
spa_data_copy[i] = '-';
}
else if (spa_data[i] == '/') {
spa_data[i] = '_';
else if (spa_data_copy[i] == '/') {
spa_data_copy[i] = '_';
}
}
snprintf(http_buf, HTTP_MAX_REQUEST_LEN,
"%s%s%s%s%s%s%s",
"GET ",
spa_data,
"GET /",
spa_data_copy,
" HTTP/1.0\r\nUser-Agent: ",
options->http_user_agent,
"\r\nAccept: */*\r\nHost: ",
options->spa_server_str, /* hostname or IP */
"\r\nConnection: Keep-Alive\r\n\r\n"
);
free(spa_data_copy);
if (options->test)
{
if (options->verbose)
fprintf(stderr, "%s\n", http_buf);
fprintf(stderr,
"[+] test mode enabled, SPA packet not actually sent.\n");
return 0;
}
return send_spa_packet_tcp_or_udp(http_buf, strlen(http_buf), options);
}