LINUX.ORG.RU
ФорумAdmin

[solved] Забиндить программу на другой порт, если порт в ней захардкожен, не меняется в настройках и исходники недоступны


1

0

Недавно кто-то тут спрашивал, а мне сегодня это тоже понадобилось. В общем:

#define _GNU_SOURCE

#include <stdio.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <dlfcn.h>

typedef int (* BindFn)(int s, const struct sockaddr *a, socklen_t al);

int bind(int s, const struct sockaddr *a, socklen_t al)
{
	BindFn real_bind_fn = dlsym(RTLD_NEXT, "bind");

	if (a->sa_family == AF_INET)
	{
		struct sockaddr_in new_addr;

		memcpy(&new_addr, a, sizeof(*a));
		new_addr.sin_port = htons(12345 /* Your port here */);

		return real_bind_fn(s, (const struct sockaddr *)&new_addr, al);
	}

	return real_bind_fn(s, a, al);
}
gcc -Wall -Wextra -fPIC -shared -ldl rebind.c -o rebind.so
LD_PRELOAD=./rebind.so start_your_program_here
Deleted

спасибо за концепт, забукмакил :)

hizel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.