How to detect Azure/Amazon VM

后端 未结 4 1361
情深已故
情深已故 2021-01-03 04:40

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,

相关标签:
4条回答
  • 2021-01-03 04:48

    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"
    
    0 讨论(0)
  • 2021-01-03 04:49

    @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
    
    0 讨论(0)
  • 2021-01-03 04:49

    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
    0 讨论(0)
  • 2021-01-03 05:08

    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.

    0 讨论(0)
提交回复
热议问题