hufrea / byedpi

Bypass DPI
MIT License
1.63k stars 107 forks source link

socket: Address family not supported by protocol / docker ipv6 disable #55

Open james007blond opened 2 months ago

james007blond commented 2 months ago

Приветствую и благодарю за проделываемую работу ,

На докерхабе есть такой контейнер image: tazihad/byedpi:latest

Сам бинарник в контейнере запускал с такими параметрами command: --hosts /hosts.dpi --disorder 1 --fake 0 --ttl 1 -A torst --tlsrec 1+s --debug 1 --auto=none

Подцепился терминалом docker exec -u 0 -it b783bb6540f sh

В отсутствии tcpdump в контейнере, что странно, просто параллельно запустил еще один бинарь на соседнем порту и стал смотреть с расширенным дебагом /opt/byedpi/ciadpi -p 1081 --hosts /hosts.dpi --disorder 1 --fake 0 --ttl 1 -A torst --tlsrec 1+s --debug 1 --auto=none

И в терминал валится вот что:

new event: fd: 3, evt: EV_ACCEPT, mod_iter: 0
accept: fd=5
new event: fd: 5, evt: EV_REQUEST, mod_iter: 1
new event: fd: 5, evt: EV_REQUEST, mod_iter: 1
socket: Address family not supported by protocol
socket: Address family not supported by protocol
ss error: 97
close: fds=5,-1

Бегло глазами, что могло вызывать подобное и .... Just had a look at this (needed to boot with ipv6.disable=1 to reproduce the issue) and I arrived at the same patch by @klynastor

И таки да, действительно, машина, в которой запускается на linux хосте имеет

root@root:# dmesg | grep 'Kernel command line'
[    0.066415] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.8.0-40-generic maybe-ubiquity ipv6.disable=1 max_loop=64

Убрал и ребутнулся, проблема исчезла. Как вариант кто-то предложил такой вариант исправить в исходниках ping'a. Проект хоть и не большой у тебя, но, я думаю, ты быстрее найдешь, как пофиксить в нем сею ошибку. Спасибо.

    --- iputils-s20200821/ping/ping.c.bak   2020-11-25 00:22:54.000000000 -0500
    +++ iputils-s20200821/ping/ping.c       2020-11-25 00:23:13.000000000 -0500
    @@ -150,8 +150,8 @@
                    /* Report error related to disabled IPv6 only when IPv6 also failed or in
                     * verbose mode. Report other errors always.
                     */
    -               if ((errno == EAFNOSUPPORT && family == AF_INET6) ||
    -                   rts->opt_verbose || requisite)
    +               if ((errno == EAFNOSUPPORT && family == AF_INET6 && requisite) ||
    +                   rts->opt_verbose)
                            error(0, errno, "socket");
                    if (requisite)
                            exit(2);
hufrea commented 2 months ago

У вас просто поддержка IPv6 была выключена, проблема не в программе. Запустите с параметром --conn-ip 0.0.0.0, ошибки должны исчезнуть.

james007blond commented 2 months ago

проблема не в программе. А я и не говорил, что проблема в программе ) Как говориться - это не "баг", а "фича" )

Я просто где-то на "просторах" вкладки issues бегло прочитал тираду про "не плохо было бы помогать и все такое", но, видимо, она была крайне витьевато написана.