2013-06-14 43 views
11

Mam utworzoną aplikację internetową korzystającą z Rook, która nasłuchuje mojej sieci ip (192.168.xx.xx) na porcie 8000. Każdy w moim biurze może się z nią połączyć po prostu wpisując http://192.168.xx.xx:8000/page_name w przeglądarce. Muszę monitorować użycie tych stron i zastanawiać się, w jaki sposób mogę uzyskać adres IP sieci tych, którzy są z nimi powiązani.Uzyskiwanie prywatnego adresu IP użytkownika z serwera Rook/Shiny

Nie mam doświadczenia w tworzeniu stron internetowych i na podstawie dotychczasowych badań wydaje się, że używanie kodu po stronie klienta, takiego jak JavaScript, jest bardzo trudne (prawie niemożliwe), aby to osiągnąć (popraw mnie, jeśli się mylę). Tak, moje pytanie brzmi: czy istnieje sposób na uzyskanie IP klienta sieciowego za pomocą kodu po stronie serwera wewnątrz aplikacji Rook? (W razie potrzeby będę skłonny zmienić serwer WWW, każde rozwiązanie zostanie docenione).

Dziękuję i przepraszam z góry, jeśli moje pytanie wydaje się być mylące ... w szczególności nie jestem pewien, czy potrzebne są inne znaczniki.

EDIT: Chciałbym również przyjąć odpowiedź za pomocą czegoś innego niż Rook (ale nadal w R)

EDIT 2: mam ustawić błyszczące Server po tym link. Jestem w trakcie konfigurowania serwera, aby uzyskać access_log, który zgodnie z @Thell zawiera potrzebne informacje. W shiny-server.conf Dodałem względną oświadczenie i teraz jest:

run_as shiny; 

server { 
    listen 3838; 

    location/{ 
    site_dir /var/shiny-server/www; 
    log_dir /var/shiny-server/log; 
    directory_index on; 
    } 

} 

access_log /home/michelec/log.txt; 

ostatni wiersz powinien powiedzieć błyszczące napisać access_log w moim katalogu domowym. Nic się jednak nie dzieje, dziennik pozostaje pusty. według here w formatów sekcji powinien otrzymać jedną z tych dzienników:

default ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"' 
short ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms' 
tiny ':method :url :status :res[content-length] - :response-time ms' 
dev concise output colored by response status for development use 

zależności jeśli pozostawić domyślny format albo jego zmiany.

+1

Czy możesz udostępnić swój kod? Na Rook nie ma wiele innych rzeczy niż podstawowa dokumentacja, więc odpowiedź na twoje pytanie będzie prawdopodobnie wymagać trochę eksperymentów, które prawdopodobnie będą wymagać odtwarzalnego przykładu. – SchaunW

+0

@SchaunW dzięki za odpowiedź. Niestety, nie mam jeszcze kodu do tego zadania. Robię reasearch każdego dnia. W takim razie na pytanie udzielono by odpowiedzi nawet za pomocą (ważnego) wejścia, aby rozpocząć to kodowanie. – Michele

+2

Miałem dzisiaj zabawę - wydawało się, że 'ip()' powinno być tym co chcesz, ale nie mogłem uzyskać z niego żadnego wyniku. – alexwhan

Odpowiedz

3

Wygląda na to, że Rook zapewni tylko zdalne dodawanie, gdy zostanie poparte przez rApache.

Innym rozwiązaniem byłoby, aby ustawić shiny-server od drobnych ludzi @ RStudio a następnie configure the access log takie, że byłbyś w stanie zanalizować, że przy użyciu wybranego access log format który wybrać.

Skłoniłbym się do Błyszczącego rozwiązania, ponieważ autor rApache pomógł również Shiny and Shiny (jako że jest to oficjalny produkt RStudio) wydaje się gotowy do wzrostu i długoterminowej dostępności, którą my can't really say about rApache (tak dobrze, jak to jest!).

+0

dziękujemy za cierpliwość w tym tygodniu! A tak na marginesie, w tych dniach, podczas ustawiania błyszczącego, widziałem, że jest on wbudowany w 'Node.js', który pozwala na łatwe uzyskanie IP przez moduł' connect'. ten moduł jest tym, co znajduje się za 'access_log', ale niestety w błyszczącym, inaczej niż w Node, nie można uzyskać dostępu do pobranego IP do kodu po stronie serwera. Zgodnie z tą dyskusją [https://groups.google.com/forum/#!searchin/shiny-discuss/susan/shiny-discuss/EGQhEyoEk3E/lNQ5jLbPOBsJ] pracują nad nią – Michele

+1

Moja przyjemność. Interesujące ... Założę się, że można go dość łatwo wprowadzić do api; i domyślam się, że tego typu funkcje pełnej kontroli będą musiały być dostępne w wersji Enterprise, więc bądź cierpliwy; albo jeszcze lepiej, zhakuj to błyszczące źródło! :) – Thell