1

Мне нравятся сопоставленные адреса, и некоторые плохие программы (lighttpd) считают, что я не прав - на самом деле, единственный конфигурационный ключ, который они позволяют мне изменить, это то, будет ли он вызывать setsockopt(IPV6_V6ONLY, true) . отключение этой конфигурации явно не устанавливает IPV6_V6ONLY в false .

Чтобы все были довольны, я бы хотел отключить возможность программы setsockopt(IPV6_V6ONLY) , оставив /proc/sys/net/ipv6/bindv6only только 0 .

Есть ли способ сделать это в старых старых Linux?

1 ответ1

0

Поскольку большинство программ делают такие вызовы через libc, используйте $ LD_PRELOAD для их перехвата:

  1. Напишите разделяемую библиотеку (файл .so), которая обеспечивает вашу собственную реализацию setsockopt() .

  2. В вашей реализации вы можете проверить параметры и вызвать исходную функцию или нет. (Используйте dlsym(RTLD_NEXT, …) чтобы получить указатель на "оригинальную" функцию, чтобы вы могли ее вызвать.)

    int frob(const char *path) {
        static int (*real_frob)(const char *);
        if (!real_frob)
            real_frob = dlsym(RTLD_NEXT, "frob");
        return real_frob(path);
    }
    
  3. После компиляции файла .c в .so установите переменную среды $ LD_PRELOAD для демона в путь к вашей новой библиотеке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .