예를 들어, FreeBSD 시스템에서 어떤 고유한 하드웨어 서명을 얻을 수 있습니까?
나는 현재 이더넷 MAC 주소(getifaddrs(3))를 사용하고 있지만, 우리 모두 알고 있듯이 이것은 ifconfig를 통해 쉽게 변경할 수 있습니다. 그래서 다른 거는? sysctl에 아무것도 없나요?
저는 이 작업을 하기 위해 C를 사용하고 있습니다. 그래서 어디를 봐야 할지 알 수 있다면 아마도 그것을 얻을 수 있는 방법을 찾을 수 있을 것입니다.
답변1
초기 접근 방식은 다음을 사용하는 것입니다.hostid
.
매뉴얼 페이지에는 다음과 같이 명시되어 있습니다.
32비트 식별자...일반적으로 로컬 컴퓨터의 DARPA 인터넷 주소
즉, 기기의 16진수 IP 주소입니다.
이는 누군가가 고장난 네트워크 카드를 교체해야 한다고 해서 변경되지 않는다는 것을 의미합니다.
이는 또한 네트워크가 구성되지 않았거나 컴퓨터가 개인 IP 주소를 사용하는 경우 고유성이 보장되지 않음을 의미합니다.
실제로 설정되지 않았을 수도 있고 슈퍼유저가 사용하거나 sethostid
변경할 수도 있습니다 sysctl
.
sysctl -a
이 외에는 출력에서 유용한 것을 찾을 수 없습니다 kern.hostid
.
OpenBSD에서는 사용할 수 있지만 hw.uuid
FreeBSD에서는 사용할 수 없습니다.
그 후에는 다음을 포함하여 도움이 될 수 있는 몇 가지 명령이 있습니다.
C에서 이 작업을 수행해야 하는 경우 다음을 살펴보세요.소스 코드위 명령에 대한 자세한 내용은 다음과 같습니다.
당신은 또한 볼 수 있습니다libvolume_id
또는libblkid
루트 파일 시스템의 ID를 가져옵니다. 포트이기 때문에 기본 시스템의 일부는 아니지만 그 중 하나는 표준 데스크탑 설치의 일부로 설치될 수 있습니다.
또한보십시오:Unix 계열 시스템에서 고유 ID 얻기.
답변2
Linux에는 메모리 모듈(DMI를 통해 제공되는 경우), 디스크, CPU 등을 포함한 많은 기존 하드웨어에서 S/N을 추출할 수 있는 "dmidecode"라는 도구가 있습니다. 이는 도움이 될 수 있지만 실제로 기계를 교체하지 않고도 이들 중 많은 부분이 변경될 수 있다는 점에 유의하십시오!
FreeBSD에 동일한 도구가 있는지는 잘 모르겠지만 공백을 메울 수 있는 것이 있다고 확신합니다.
답변3
dmidecode는 FreeBSD에서 사용할 수 있습니다. 저는 FreeBSD 8.2-RELEASE에 dmidecode-2.12를 설치했습니다.
Linux 시스템과 같은 완전한 하드웨어 정보를 제공합니다.