2013-02-11 12 views

Odpowiedz

17

Got to drukowanie klucze w obiekcie Gniazdo:

> ws._socket.address() 
    { port: 8081, 
    family: 2, 
    address: '127.0.0.1' } 

> ws._socket.remoteAddress 
    '74.125.224.194' 

> ws._socket.remotePort 
    41435 

nie mam żadnej dokumentacji, więc nie jestem pewien, jak dobrze ta jest obsługiwana w poprzek wersjach:/

34

Po trochę bawić próbuje dowiedzieć się, który z nich daje adres IP klienta (przeglądarki internetowej), odpowiedź brzmi:

ws._socket.remoteAddress 

Lub jeśli masz dostęp do req poprzez wss.on('connection', (ws, req) => {}):

req.connection.remoteAddress; 

Można to wykorzystać na przykład do GeoIP zlokalizować gdzie użytkownik łączy się z.

Edit:

Jeśli używasz Node za jeden reverse proxy Nginx (lub jakiegokolwiek innego reverse proxy dla tej sprawy), może trzeba użyć:

req.headers['x-forwarded-for'] || req.connection.remoteAddress 

Uwaga na w sprawie bezpieczeństwa: Jeśli twój serwer węzłowy jest dostępny bezpośrednio, a także przez odwrotne proxy, możesz sprawdzić remoteAddress zanim zaufasz x-forwarded-for. Adres zdalny powinien być adresem IP twojego reverse proxy. Istnieje dziwna szansa, że ​​ktoś może zadzwonić do twojej usługi bezpośrednio i podrobić x-forwarded-for.

+0

Wystarczy być pedantyczny - edycja dotyczy wszystkich reverse proxy, a nie tylko nginx (wiele osób korzysta HAProxy) – UpTheCreek

+0

Hmmm to jest dziwne, gdy wyświetlanie socket.upgradeReq.connection w konsoli Pole remoteAddress jest ukryte, czy jest jakiś pomysł, dlaczego? Zajęło mi to na zawsze znalezienie IP użytkowników. Dziękuję Chris Nolet! :) –

+0

To szokujące, że wszystkie te interfejsy API różnią się tak bardzo. Tyle potencjału, ale tak rozdrobnionego. –

Powiązane problemy