Что эквивалентно SIOCGIFINDEX для macOS? - PullRequest
0 голосов
/ 21 января 2019

Попытка скомпилировать утилиту Linux под названием mdns-scan для использования в системе MacOS.
Вот параллельное сравнение:

enter image description here

Debian:

Успешность компиляции:

<b>root@debian:~#</b> cd /git
<b>root@debian:/git#</b> git clone https://salsa.debian.org/alteholz/mdns-scan.git
Cloning into 'mdns-scan'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 77 (delta 23), reused 0 (delta 0)
Unpacking objects: 100% (77/77), done.
<b>root@debian:/git#</b> cd mdns-scan/
<b>root@debian:/git/mdns-scan#</b> make
cc -Wall -W -g -O0 -pipe   -c -o mdns-scan.o mdns-scan.c
mdns-scan.c: In function ‘main’:
mdns-scan.c:218:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
 int main(int argc, char*argv[]) {
          ~~~~^~~~
mdns-scan.c:218:25: warning: unused parameter ‘argv’ [-Wunused-parameter]
 int main(int argc, char*argv[]) {
                    ~~~~~^~~~~~
cc -Wall -W -g -O0 -pipe   -c -o dns.o dns.c
cc -Wall -W -g -O0 -pipe   -c -o query.o query.c
cc -Wall -W -g -O0 -pipe   -c -o util.o util.c
cc -o mdns-scan mdns-scan.o dns.o query.o util.o
<b>root@debian:/git/mdns-scan#</b> make install
install mdns-scan /usr/bin/mdns-scan

macOS:

Ошибка компиляции:

<b>user@macos:~$</b> cd /git
<b>user@macos:git$</b> sudo git clone https://salsa.debian.org/alteholz/mdns-scan.git
Cloning into 'mdns-scan'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 77 (delta 22), reused 0 (delta 0)
Unpacking objects: 100% (77/77), done.
<b>user@macos:/git$</b> cd mdns-scan/
<b>user@macos:/git/mdns-scan$</b> sudo make
cc -Wall -W -g -O0 -pipe   -c -o mdns-scan.o mdns-scan.c
mdns-scan.c:218:14: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char*argv[]) {
             ^
mdns-scan.c:218:25: warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char*argv[]) {
                        ^
2 warnings generated.
cc -Wall -W -g -O0 -pipe   -c -o dns.o dns.c
cc -Wall -W -g -O0 -pipe   -c -o query.o query.c
query.c:192:23: error: use of undeclared identifier 'SIOCGIFINDEX'
        if (ioctl(fd, SIOCGIFINDEX, &ifreq[i]) ipi_ifindex = ifreq[i].ifr_ifindex;
                            ~~~~~~~~ ^
query.c:248:41: error: use of undeclared identifier 'SOL_IP'
                if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_TTL) {
                                        ^
3 errors generated.
make: *** [query.o] Error 1
<b>user@macos:/git/mdns-scan$</b> sudo make install
install mdns-scan /usr/bin/mdns-scan
install: mdns-scan: No such file or directory
make: *** [install] Error 71

Код:

Кажется, что это код, вызывающий первую ошибку:

if (ioctl(fd, SIOCGIFCONF, &ifconf) < 0) {
    fprintf(stderr, "SIOCGIFCONF failed: %s\n", strerror(errno));
    return -1;
}

Библиотеки:

Из стандартной библиотеки C GNU:

#include <sys/ioctl.h>
#include <net/if.h>

Сведения:

со страницы netdevice(7) man:

<b>SIOCGIFINDEX</b>
       Retrieve the interface index of the interface into <i>ifr_ifindex.</i>

Источник: http://man7.org/linux/man-pages/man7/netdevice.7.html


Таким образом, в основном, это позволяет выбрать интерфейс сетевого контроллера из индекса.Но это специфично для Linux, а не для macOS.Что я могу сделать?Чем я могу заменить этот код, чтобы портировать эту утилиту (и, возможно, другие) на macOS;или добавить совместимость?

...