>source

문제의 배경 :

내 배경은 네트워크에 연결되지 않은 프로그래밍이므로 웹 개발이 처음입니다. 나는 자바 스크립트를 가르치는 과정에 있습니다. 나는 node.js를 실험하고 있으며 무료 AWS EC2 인스턴스에 배포하여 함께 놀았습니다. IP Geolocation API로 작업하고 싶으므로 서버에 요청할 때 랩톱의 공용 IP 주소를 가져와야합니다.

내가 시도한 것 :

nodejs에서이 작업을 수행하는 올바른 방법을 설명하는 몇 개의 게시물을 보았습니다.

http.createServer(function (req, res) {
  req.socket.address
  ...

또는 프록시의 경우 :

http.createServer(function (req, res) {
  request.headers[x-forwarded-for]
  ...

내 문제가 다른 이유 :

이 두 가지 방법 중 어느 것도 원하는 값을 얻지 못했습니다.

Object.entries (request.socket.address)는 Amazon 내부 IP 주소를 생성하는데, 모든 인스턴스에 고유 한 전역 IP를 부여하면 Amazon의 공급이 매우 빠르게 소모 될 것입니다. 다른 많은 인스턴스와 인스턴스 IP 및이 방법은 확실하지 않지만 다중화하는 방법입니다. 누군가가 이것에 대해 더 많이 알고 있다면 그것을 재미로 읽고 싶습니다.

Object.entries (request.headers)에 'x-forwarded-for'키 /val이 포함되어 있지 않습니다.

보안상의 이유로 일부 값을 수정해야하지만 다음은 콘솔에 기록 된 값입니다.

request.socket.address: address,::ffff:172.31.x.x,family,IPv6,port,80
request.headers: host,ec2-54-205-x-x.compute-1.amazonaws.com,connection,keep-alive,pragma,no-cache,cache-control,no-cache,user-agent,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68,accept,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8,referer,http://ec2-54-205-x-x.compute-1.amazonaws.com/,accept-encoding,gzip, deflate,accept-language,en-US,en;q=0.9

조금 읽어 봤지만 내가 할 수있는 일이 무엇인지 모르겠습니다. 저를 발전시키는 데 도움을 주셔서 대단히 감사합니다. 미리 감사드립니다 :)

모든 인스턴스에 고유 한 전역 IP를 제공하기 때문에-예, 실제로 Amazon은 모든 인스턴스에 고유 한 IP 주소를 제공합니다. 프록시 할 수없는 EC2에서 실행할 수있는 프로토콜이 많이 있기 때문입니다. 인스턴스에 대한 SSH 연결. AWS는로드 밸런서 또는 Cloudfront를 사용하여 직접 지시하지 않는 한 인스턴스에 대한 http 연결을 프록시하지 않습니다.

slebetman2021-02-23 03:05:19

네, 54.205.x.x는 당신이받은 IP입니다. 그들은 최소한 55,593,368 개의 IP 주소를 가지고 있으며 그렇게 할 수 있습니다. 원격 IP에 대한 req.socket.remoteAddress를 원합니다 (즉, 랩톱의 IP).

Anon Coward2021-02-23 03:05:19

@AnonCoward 그게 해냈습니다. 감사합니다!

Currn Hyde2021-02-23 03:05:19

  • 답변 # 1

    작은 오해가 있습니다.

    http.createServer(function (req, res) {
          req.socket.address
          ...
    

    req.socket.address여기 당신의 주소입니다. AWS의 경우 이것은 개인 주소이고172.31.x.x주소. 공개 주소를 원하는 경우 몇 가지 옵션이 있습니다.http://checkip.amazonaws.com/끝점, 이것은54.205.x.x주소.

    즉, 귀하의 설명은 컴퓨터의 IP 주소가 귀하에게 연결되기를 원한다고 제안합니다. TCP 패킷의 일부이기 때문에 변경하면req.socket.address...에req.socket.remoteAddress, 당신은 당신의 랩탑의 퍼블릭 IP가 될 당신이 말하는 컴퓨터의 IP 주소를 얻게 될 것입니다 (또는 그 경우에 뒤에있는 NAT).

    그리고 관련이 없기 때문에 AWS가 얼마나 많은 IP를 가지고 있는지에 대한 규모를 이해하는이 사이트가 마음에 듭니다.

    Anon Coward2021-02-23 03:05:19

    AWS에 대한 도움과 추가 정보에 감사드립니다!

    Currn Hyde2021-02-23 03:05:19
  • 이전 java : 다른 사각형을 그릴 때 Jpanel에 그린 사각형을 유지하는 방법은 무엇입니까?
  • 다음 scala : CSV에서 구분자로 이중 파이프를 사용하는 방법은 무엇입니까?