socket.io에서 클라이언트의 IP 주소를 가져옵니다
Node.js 서버에서 socket.IO를 사용할 때 들어오는 연결의 IP 주소를 얻는 쉬운 방법이 있습니까? 표준 HTTP 연결에서 얻을 수 있다는 것을 알고 있지만 socket.io는 약간 다른 짐승입니다.
0.7.7부터는 루바가 설명하는 방식으로 사용할 수 없지만 사용할 수 있습니다. 나는 이것을 알아 내기 위해 git hub의 커밋 로그를 파싱해야했지만 결국 다음 코드가 실제로 작동합니다.
var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
var address = socket.handshake.address;
console.log('New connection from ' + address.address + ':' + address.port);
});
1.0.4의 경우 :
io.sockets.on('connection', function (socket) {
var socketId = socket.id;
var clientIp = socket.request.connection.remoteAddress;
console.log(clientIp);
});
다른 서버를 리버스 프록시로 사용하는 경우 언급 된 모든 필드에 localhost가 포함됩니다. 가장 쉬운 해결 방법은 프록시 서버에서 ip / port에 대한 헤더를 추가하는 것입니다.
nginx의 예 : 다음에 이것을 추가하십시오 proxy_pass
:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
그러면 socket.io 노드 서버에서 헤더를 사용할 수 있습니다.
var ip = socket.handshake.headers["x-real-ip"];
var port = socket.handshake.headers["x-real-port"];
헤더는 내부적으로 소문자로 변환됩니다.
노드 서버를 클라이언트에 직접 연결하는 경우
var ip = socket.conn.remoteAddress;
socket.io 버전 1.4.6에서 작동합니다.
최신 socket.io 버전 사용
socket.request.connection.remoteAddress
예를 들면 다음과 같습니다.
var socket = io.listen(server);
socket.on('connection', function (client) {
var client_ip_address = socket.request.connection.remoteAddress;
}
아래 코드는 클라이언트의 IP가 아닌 서버의 IP를 반환합니다.
var address = socket.handshake.address;
console.log('New connection from ' + address.address + ':' + address.port);
의 최신 1.0.6
버전을 사용하고에 Socket.IO
응용 프로그램을 배포 Heroku
하면 클라이언트 IP
를 port
사용하여 다음 headers
을 사용합니다 socket handshake
.
var socketio = require('socket.io').listen(server);
socketio.on('connection', function(socket) {
var sHeaders = socket.handshake.headers;
console.info('[%s:%s] CONNECT', sHeaders['x-forwarded-for'], sHeaders['x-forwarded-port']);
}
socket.io 1.1.0부터 다음을 사용합니다.
io.on('connection', function (socket) {
console.log('connection :', socket.request.connection._peername);
// connection : { address: '192.168.1.86', family: 'IPv4', port: 52837 }
}
편집 : 이것은 공식 API의 일부가 아니므로 socket.io의 이후 릴리스에서 작동하지 않을 수도 있습니다.
또한 관련 링크를 참조하십시오 : engine.io 문제
Socket.IO 버전 0.7.7은 이제 클라이언트의 IP 주소를 반환한다고 주장합니다. 나는 성공했다 :
var socket = io.listen(server);
socket.on('connection', function (client) {
var ip_address = client.connection.remoteAddress;
}
From reading the socket.io source code it looks like the "listen" method takes arguments (server, options, fn) and if "server" is an instance of an HTTP/S server it will simply wrap it for you.
So you could presumably give it an empty server which listens for the 'connection' event and handles the socket remoteAddress; however, things might be very difficult if you need to associate that address with an actual socket.io Socket object.
var http = require('http')
, io = require('socket.io');
io.listen(new http.Server().on('connection', function(sock) {
console.log('Client connected from: ' + sock.remoteAddress);
}).listen(80));
Might be easier to submit a patch to socket.io wherein their own Socket object is extended with the remoteAddress property assigned at connection time...
This seems to work:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
var endpoint = socket.manager.handshaken[socket.id].address;
console.log('Client connected from: ' + endpoint.address + ":" + endpoint.port);
});
I have found that within the socket.handshake.headers there is a forwarded for address which doesn't appear on my local machine. And I was able to get the remote address using:
socket.handshake.headers['x-forwarded-for']
This is in the server side and not client side.
Very easy. First put
io.sockets.on('connection', function (socket) {
console.log(socket);
You will see all fields of socket. then use CTRL+F and search the word address. Finally, when you find the field remoteAddress use dots to filter data. in my case it is
console.log(socket.conn.remoteAddress);
In socket.io 2.0: you can use:
socket.conn.transport.socket._socket.remoteAddress
works with transports: ['websocket']
on socket.io
1.3.4 you have the following possibilities.
socket.handshake.address
,
socket.conn.remoteAddress
or
socket.request.client._peername.address
use socket.request.connection.remoteAddress
Latest version works with:
console.log(socket.handshake.address);
In 1.3.5 :
var clientIP = socket.handshake.headers.host;
참고URL : https://stackoverflow.com/questions/6458083/get-the-clients-ip-address-in-socket-io
'development' 카테고리의 다른 글
다트에서 싱글 톤을 어떻게 만드나요? (0) | 2020.07.06 |
---|---|
이것이 의미하는 것은 : 실패 [INSTALL_FAILED_CONTAINER_ERROR]? (0) | 2020.07.06 |
len (generator ())하는 방법 (0) | 2020.07.06 |
Git 태그는 현재 브랜치에만 적용됩니까? (0) | 2020.07.06 |
Visual Studio 2017 : 표시 방법 참조 (0) | 2020.07.06 |