Ejemplo n.º 1
0
/* Grab all the arguments after the index as a single string.
 * Warning: the string must be freed manually afterwards!
 */
gboolean
command_arg_longstring_get (command_context_t *ctx, gint at, gchar **v)
{
	gboolean retval = FALSE;

	if (at < command_arg_count (ctx)) {
		*v = g_strjoinv (" ", &(command_arg_get (ctx, at)));
		retval = TRUE;
	}

	return retval;
}
Ejemplo n.º 2
0
gboolean
command_arg_int_get (command_context_t *ctx, gint at, gint *v)
{
	gboolean retval = FALSE;

	if (at < command_arg_count (ctx)) {
		*v = strtol (command_arg_get (ctx, at), NULL, 10);
		retval = TRUE;
	}

	return retval;
}
Ejemplo n.º 3
0
gboolean
command_arg_string_get (command_context_t *ctx, gint at, const gchar **v)
{
	gboolean retval = FALSE;

	if (at < command_arg_count (ctx)) {
		*v = command_arg_get (ctx, at);
		retval = TRUE;
	}

	return retval;
}
Ejemplo n.º 4
0
/* Like command_arg_longstring_get but escape spaces with '\'.
 */
gboolean
command_arg_longstring_get_escaped (command_context_t *ctx, gint at, gchar **v)
{
	gboolean retval = FALSE;
	gchar **args;
	gint i, len, count = command_arg_count (ctx);

	len = count-at+1;
	if (at < count) {
		args = g_new0 (gchar *, len);
		args[len-1] = NULL;
		for (i = at; i < count; i++) {
			args[i-at] = strescape (command_arg_get (ctx, i), " ", '\\');
		}
		*v = g_strjoinv (" ", args);

		for (i = at; i < count; i++) {
			g_free (args[i-at]);
		}
		g_free (args);

		retval = TRUE;
	}
Ejemplo n.º 5
0
int main(int argc, char *argv[])
{
	dnsPacket *dns, *dnsresponse;
	int iResult, iReceived;
	char *qdomain, *qserver, *response;
	unsigned short qtype = 1, qclass = 1;

	qdomain = ((qdomain = command_arg_get(0, '-', argc, argv)) != NULL) ? qdomain : DNS_DEFAULT_LOOKUP;
	qserver = ((qserver = command_arg_get(1, '-', argc, argv)) != NULL) ? qserver : DNS_LOOKUP_SERVER;

	// create our empty DNS packet
	dns = dns_create();

	// set the required header fields
	dns->base->id = DNS_IDENTIFIER;

	// use recursive query?
	if (command_opt_set("-r", argc, argv))
	{
		dns->base->flags |= DNS_FLAGS_RD;
		printf("+ Using recursive querying\n");
	}

	// use a different query type?
	if (command_opt_set("-cname", argc, argv))
	{
		qtype = DNS_TYPE_CNAME;
		printf("+ Using CNAME query type\n");
	}
	else if (command_opt_set("-ns", argc, argv))
	{
		qtype = DNS_TYPE_NS;
		printf("+ Using NS query type\n");
	}
	else if (command_opt_set("-mx", argc, argv))
	{
		qtype = DNS_TYPE_MX;
		printf("+ Using MX query type\n");
	}
	else if (command_opt_set("-ptr", argc, argv))
	{
		qtype = DNS_TYPE_PTR;
		printf("+ Using PTR query type\n");
	}
	else if (command_opt_set("-aaaa", argc, argv))
	{
		qtype = DNS_TYPE_AAAA;
		printf("+ Using AAAA query type\n");
	}

	// add our question section
	dns_add_question(dns, qdomain, strlen(qdomain), qtype, qclass);
	dns_hton(dns);

	// initialize the network
	network_init(qserver, DNS_PORT);
	network_connect_udp();

	// send the packet out
	printf("Looking up %s using %s...\n", qdomain, qserver);
	iResult = network_send((char *)dns->base, dns->size);
	assert(iResult > 0);
	
	// block until a response is ready
	response = network_receive(&iReceived);
	assert(iReceived > 0);

	// load up the response packet
	dnsresponse = dns_parse(response, iReceived);
	assert(dnsresponse->base->flags & DNS_FLAGS_RESPONSE && dnsresponse->base->id == DNS_IDENTIFIER);

	output_print_response(dnsresponse);
	output_print_sections(dnsresponse);
}