How to detect Azure/Amazon VM

邮差的信 提交于 2019-12-21 05:24:09

问题


Is there any way to detect, in general, if your code is executing on an Azure or Amazon virtual machine. I am not referring to some sort of web or worker role in particular, I mean given any executable, is there anything that resolves that machine to a cloud VM - for example under Azure there is no domain so i cannot simply rely on a domain name.


回答1:


@Dan's answer no longer works for Azure, use the following URL to get a better list

http://msdn.microsoft.com/en-us/library/windowsazure/dn175718.aspx

If this url ever disappears here is a copy from today (August 12th 2013)

Europe West
65.52.128.0/19
213.199.128.0/20
168.63.0.0/19
168.63.96.0/19
137.116.192.0/19
137.117.128.0/17
168.61.56.0/21

Europe North
65.52.64.0/20
65.52.224.0/19
168.63.92.0/22
168.63.32.0/19
94.245.88.0/21
94.245.104.0/21
168.63.64.0/20
168.63.80.0/20
168.61.96.0/19
137.116.224.0/20

US East
168.62.32.0/19
157.56.176.0/21
168.62.160.0/19
168.61.32.0/20
168.61.48.0/21
137.117.64.0/18
137.135.64.0/18
138.91.96.0/19
137.116.112.0/20

US West
168.62.192.0/20
168.62.208.0/21
168.61.0.0/20
168.61.64.0/20
137.117.0.0/19
137.135.0.0/18
137.116.184.0/21
138.91.64.0/19
65.52.112.0/20
168.63.89.0/24
157.56.160.0/21
168.62.0.0/19

US North Central
65.52.0.0/19
65.52.0.0/20
65.52.16.0/20
65.52.192.0/19
65.52.48.0/20
157.55.24.0/21
157.55.64.0/20
157.55.160.0/20
157.55.136.0/21
157.55.208.0/20
157.56.8.0/21
157.55.252.0/22
168.62.96.0/19
157.55.248.0/22
168.62.224.0/19

US South Central
157.55.176.10/22
157.55.183.223/27
157.55.184.10/22
157.55.191.223/27
157.55.192.10/24
157.55.193.223/27
157.55.194.10/24
157.55.195.223/27
157.55.196.10/23
157.55.200.10/23
157.55.80.10/23
157.55.83.223/27
157.55.84.10/23
157.55.87.223/27
65.52.32.10/22
65.52.39.224/28
70.37.160.10/22
70.37.167.224/28
70.37.118.0/24
70.37.119.138/28
70.37.119.170/28
70.37.48.10/22
70.37.55.224/28
70.37.56.10/22
70.37.63.224/28
70.37.116.0/24

SE Asia
111.221.96.0/20
168.63.160.0/19
111.221.80.0/20
168.63.224.0/19
137.116.128.0/19

East Asia
65.52.160.0/19
111.221.78.0/23
168.63.128.0/19
168.63.192.0/19
137.116.160.0/20



回答2:


AWS

If your guest has networking up then you can probe the instance metadata by accessing http://169.254.169.254

For example:

$ curl http://169.254.169.254/1.0/meta-data/instance-id
i-87dc2f76

However, hitting the network is fairly heavy-weight.

On AWS you can also check by looking at dmidecode:

$ /usr/sbin/dmidecode -s bios-version | tr "[:upper:]" "[:lower:]" | grep -q "amazon"

dmidecode is light-weight since it only hits the memory of the guest OS. However, as pointed out in previous answers it is dependent on Amazon continuing to include the word "amazon" in their version strings.

Azure

On Azure, you can detect the hypervisor details but this doesn't allow you to discriminate between Azure and HyperV. Depending on your scenario this might not be necessary.

To detect Azure/HyperV using dmidecode check the following strings:

$ /usr/sbin/dmidecode -s system-manufacturer | tr "[:upper:]" "[:lower:]" | grep -q "microsoft corporation"

$ /usr/sbin/dmidecode -s system-product-name | tr "[:upper:]" "[:lower:]" | grep -q "virtual machine"



回答3:


You could look at the machine's ip address, and determine if it is in a particular cloud's ip address block.

For Azure, the published list of ip address ranges for each subregion is an xml file at:

http://download.microsoft.com/download/E/F/C/EFC5E4D8-E4EA-4EFE-9356-D8AEEBC85F50/Azure_IP_Ranges.xml

Amazon will post a blog entry when they add new ranges. They are currently:

US East (Northern Virginia):

  • 72.44.32.0/19 (72.44.32.0 - 72.44.63.255)
  • 67.202.0.0/18 (67.202.0.0 - 67.202.63.255)
  • 75.101.128.0/17 (75.101.128.0 - 75.101.255.255)
  • 174.129.0.0/16 (174.129.0.0 - 174.129.255.255)
  • 204.236.192.0/18 (204.236.192.0 - 204.236.255.255)
  • 184.73.0.0/16 (184.73.0.0 – 184.73.255.255)
  • 184.72.128.0/17 (184.72.128.0 - 184.72.255.255)
  • 184.72.64.0/18 (184.72.64.0 - 184.72.127.255)
  • 50.16.0.0/15 (50.16.0.0 - 50.17.255.255)
  • 50.19.0.0/16 (50.19.0.0 - 50.19.255.255)
  • 107.20.0.0/14 (107.20.0.0 - 107.23.255.255)
  • 23.20.0.0/14 (23.20.0.0 – 23.23.255.255)
  • 54.242.0.0/15 (54.242.0.0 – 54.243.255.255)
  • 54.234.0.0/15 (54.234.0.0 – 54.235.255.255) NEW
  • 54.236.0.0/15 (54.236.0.0 – 54.237.255.255) NEW

US West (Oregon):

  • 50.112.0.0/16 (50.112.0.0 - 50.112.255.255)
  • 54.245.0.0/16 (54.245.0.0 – 54.245.255.255)

US West (Northern California):

  • 204.236.128.0/18 (204.236.128.0 - 204.236.191.255)
  • 184.72.0.0/18 (184.72.0.0 – 184.72.63.255)
  • 50.18.0.0/16 (50.18.0.0 - 50.18.255.255)
  • 184.169.128.0/17 (184.169.128.0 - 184.169.255.255)
  • 54.241.0.0/16 (54.241.0.0 – 54.241.255.255)

EU (Ireland):

  • 79.125.0.0/17 (79.125.0.0 - 79.125.127.255)
  • 46.51.128.0/18 (46.51.128.0 - 46.51.191.255)
  • 46.51.192.0/20 (46.51.192.0 - 46.51.207.255)
  • 46.137.0.0/17 (46.137.0.0 - 46.137.127.255)
  • 46.137.128.0/18 (46.137.128.0 - 46.137.191.255)
  • 176.34.128.0/17 (176.34.128.0 - 176.34.255.255)
  • 176.34.64.0/18 (176.34.64.0 – 176.34.127.255)
  • 54.247.0.0/16 (54.247.0.0 – 54.247.255.255)
  • 54.246.0.0/16 (54.246.0.0 – 54.246.255.255) NEW

Asia Pacific (Singapore)

  • 175.41.128.0/18 (175.41.128.0 - 175.41.191.255)
  • 122.248.192.0/18 (122.248.192.0 - 122.248.255.255)
  • 46.137.192.0/18 (46.137.192.0 - 46.137.255.255)
  • 46.51.216.0/21 (46.51.216.0 - 46.51.223.255)
  • 54.251.0.0/16 (54.251.0.0 – 54.251.255.255)

Asia Pacific (Tokyo)

  • 175.41.192.0/18 (175.41.192.0 - 175.41.255.255)
  • 46.51.224.0/19 (46.51.224.0 - 46.51.255.255)
  • 176.32.64.0/19 (176.32.64.0 - 176.32.95.255)
  • 103.4.8.0/21 (103.4.8.0 - 103.4.15.255)
  • 176.34.0.0/18 (176.34.0.0 - 176.34.63.255)
  • 54.248.0.0/15 (54.248.0.0 - 54.249.255.255)

South America (Sao Paulo)

  • 177.71.128.0/17 (177.71.128.0 - 177.71.255.255)
  • 54.232.0.0/16 (54.232.0.0 – 54.232.255.255) NEW



回答4:


This is an internal way to check if you machine instance is in amazon or not:

dmidecode | grep Version
version: 4.2.amazon     <--- This is what you would want to key on

This would only work as long as Amazon maintains their signature in their VM's virtual BIOS settings. I have not worked with Azure, but I am sure you could extrapolate information using dmidecode as well. I have done it with VMware, and VirtualBox.



来源:https://stackoverflow.com/questions/11570965/how-to-detect-azure-amazon-vm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!