IP-переключение с использованием Python в экземпляре AWS Ubuntu EC2 - PullRequest
0 голосов
/ 27 сентября 2019

На самом деле у меня есть несколько вторичных частных IP-адресов, привязанных к моему экземпляру ec2, каждый из которых связан с публичным Elastic IP-адресом.И у меня есть кусок кода Python для выполнения некоторых запросов API, используя python-requests.Мне нужно установить собственный исходный IP-адрес перед отправкой каждого запроса из списка уже подключенных IP-адресов.

Попробовал ниже код, но завершился ошибкой:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('X.X.X.X', 20))

Заранее спасибо

1 Ответ

2 голосов
/ 27 сентября 2019

Эластичный IP-адрес существует за NAT 1: 1, поэтому вам необходимо привязать локальный IP-адрес, за которым находится экземпляр.Вы можете попросить хранилище метаданных получить публичные / локальные IP-адреса для каждого сетевого адаптера.

В большинстве случаев это довольно просто:

import requests
import socket

metadata = "http://169.254.169.254/latest/meta-data/network/interfaces/macs/"

for mac_id in requests.get(metadata).text.split("\n"):
    local_ip = requests.get(metadata + mac_id + "local-ipv4s").text
    public_ip = requests.get(metadata + mac_id + "public-ipv4s").text
    print("{} has local IP of {} and public IP of {}".format(mac_id, local_ip, public_ip))

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((local_ip, 1234))
...