2012-10-13 17 views
7

Tôi không nghĩ câu hỏi đó cần bất kỳ lời giải thích nào. Tôi đang viết một phần mềm có thể khởi động các máy ảo để mô phỏng một mạng. Tôi muốn vô hiệu hóa tính năng này nếu phần mềm đã chạy trên một máy ảo.Cách phát hiện xem tập lệnh có đang chạy trên máy ảo không?

Tôi đã đọc bài đăng này: How to detect if my application is running in a virtual machine? Nhưng tôi cần làm điều đó trên Linux và bài đăng đó chỉ bao gồm Windows.

Tôi gắn thẻ nó là câu hỏi Perl như tôi đã làm trong Perl, nhưng có thể có một số tệp trong proc hoặc một nơi khác để kiểm tra và nó giống nhau cho tất cả ngôn ngữ. Tôi không biết thực sự.

Tôi quan tâm đến việc phát hiện chủ yếu VirtualBox và KVM, vì đó là những máy ảo tôi đang sử dụng.

Vì vậy, có đề xuất nào không?

+0

* bạn đang sử dụng phần mềm máy ảo nào? Các hướng dẫn có thể khác nhau đối với các máy ảo khác nhau. – nneonneo

+0

@nneonneo, Đã thêm vào câu hỏi. – Zagorax

+0

Tại sao bạn hỏi? Một máy ảo lý tưởng không nên được phát hiện, vì theo định nghĩa, nó sẽ hoạt động giống như một cỗ máy thực. –

Trả lời

11

Tôi sẽ nói cụ thể với VMware và Virtual Virtual Machine ảo đang chạy Linux làm hệ điều hành khách. Nếu bạn chạy lệnh dưới đây, bạn sẽ biết rằng phần cứng cơ bản là VMware/VirtualBox xác nhận rằng đó là một Máy ảo.

Đối với VMware khách:

# dmidecode | grep -i product 
     Product Name: VMware Virtual Platform 

Đối với khách Virtual Box:

# dmidecode | grep -i product 
    Product Name: VirtualBox 

"dmidecode" là một lệnh hệ thống Linux. Bạn có thể chạy perl chạy dmidecode khi bắt đầu tập lệnh và trích xuất giá trị. Nếu nó là một máy ảo thì kịch bản sẽ thoát ra mà không cần thực hiện thêm.

Tôi không có bất kỳ trình giám sát nào khác theo ý của tôi để giúp bạn có được những gì ở trên lệnh trả về chúng.

Hy vọng điều này sẽ hữu ích.