4
프로그래밍 방식으로 FreeBSD에서 네트워크 인터페이스 정보를 찾으려고합니다. linux에서 인터페이스는/etc/network/interfaces 파일에 나열되어 있습니다.FreeBSD : 네트워크 인터페이스 정보
FreeBSD에 이러한 파일이 있습니까? 어떻게 정보를 추출 할 수 있습니까? 당신은 항상 여기 getifaddrs(3)
을 사용할 수 있습니다
프로그래밍 방식으로 FreeBSD에서 네트워크 인터페이스 정보를 찾으려고합니다. linux에서 인터페이스는/etc/network/interfaces 파일에 나열되어 있습니다.FreeBSD : 네트워크 인터페이스 정보
FreeBSD에 이러한 파일이 있습니까? 어떻게 정보를 추출 할 수 있습니까? 당신은 항상 여기 getifaddrs(3)
을 사용할 수 있습니다
는 exmaple입니다 :
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <ifaddrs.h>
int main(void) {
struct ifaddrs *ifap,*ifa;
getifaddrs(&ifap);
for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
printf("%s\n",ifa->ifa_name);
}
freeifaddrs(ifap);
}
편집 : 당신이 netpacket에서 발견된다 당신이 인 sa_family AF_PACKET을 위해 볼 필요가 인터페이스의 링크 계층 주소를 가져 오기 위해 필요한 경우 리눅스에서 리눅스에서 /packet.h , * BSD의 전화 AF_LINK과는 그물/if_dl.h
#ifdef AF_LINK
# include <net/if_dl.h>
#endif
#ifdef AF_PACKET
# include <netpacket/packet.h>
#endif
#ifdef AF_LINK
#define SDL ((struct sockaddr_dl *)ifa->ifa_addr)
if (SDL->sdl_family == AF_LINK) {
bcopy(SDL->sdl_data + SDL->sdl_nlen,....,SDL->sdl_alen
}
#undef SDL
#endif
#ifdef AF_PACKET
if (ifa->ifa_addr->sa_family == AF_PACKET) {
struct sockaddr_ll *sl =
(struct sockaddr_ll*) ifa->ifa_addr;
bcopy(sl->sll_addr,....,sl->sll_halen
}
#endif
이 중복 된 항목을 나열되지만 나는 당신의 점을 얻었다. 구조체를 살펴 보겠습니다. – hari
@hari, yea 인터페이스에 할당 된 각 주소에 대한 항목이 있으므로 (링크 계층, ipv4, ipv6 ..), Linux, macosx, * bsd에서 동일한 것을 사용할 수 있습니다. - 몇 가지 차이점이 있습니다. - AF_LINK처럼 리눅스에 존재하지 않지만 링크 laye에 대한 AF_PACKET이라는 이름은 해당 게시물을 편집했습니다 – jackdoe
도움을 주셔서 감사합니다. – hari