Попытка скомпилировать утилиту Linux под названием mdns-scan
для использования в системе MacOS.
Вот параллельное сравнение:
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;или добавить совместимость?