[python] získání IP adresy
Jan Jakubuv
jakubuv na gmail.com
Neděle Červen 3 20:23:13 CEST 2007
hmm, tipnul bych si ze to ze request.remote vraci 'localhost' bude i
problem proc sessions nefunguji jak maji. taky bych si tipnul ze
pricina proc je remote 'localhost' bude prave prevod adres z privatni
site. je ten server na kterem bezi cherrypy ten samy server co
zprostredkovava pripojeni k Internetu pocitacum z privatni site?
nicmene nezapominejte ze z pohledu pocitace v Internetu maji vsechny
pocitace ve VPN stejnou IP adresu.
v tomto pripade bych dopurucoval zapomenout na sessions a udelat
'praci sessions rucne'. nejakou variaci na kod nize. kod je funkcni
aplikace, chybi pouze login.conf + nekolik malickosti jako je
odhlaseni uzivatele a smazani neaktivnich seanci jednou za cas (po pul
hodine..)
#!/usr/bin/python
# -*- coding: utf-8 -*-
HTMLheader = """
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title>login</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
"""
HTMLfooter = """
</body></html>
"""
HTMLloginform = '''
<form method="post" action="index?login">
<input type="text" name="user">
<input type="password" name="passwd">
<input type="submit">
</form>
'''
import cherrypy
import random
from time import time
class Login:
def __init__(self):
self.sessions = {}
random.seed()
def freshid(self):
"Vrati jednoznacny retezec identifikujici seanci"
def _id():
return str(random.random())[2:]
id = _id()
while id in self.sessions:
id = _id()
return id
def setsessiondata(self, sessionid, data):
"Spoji data se seanci sessionid"
self.sessions[sessionid] = data
def getsessiondata(self, sessionid):
"Vrati data seance sessionid"
if sessionid in self.sessions:
return self.sessions[sessionid]
else:
return None
@cherrypy.expose
def index(self, login=None, user=None, passwd=None, sessionid=None):
"hlavni a jedina stranka"
if not (login is None or user is None or passwd is None):
# prihlaseni uzivatele (overit heslo,...)
sessionid = self.freshid()
self.setsessiondata(sessionid, dict(user=user, time=time()))
html = '''<h1>welcome %s</h1>
<p><a href="index?sessionid=%s">your data</a>
''' % (user, sessionid)
elif sessionid is not None:
# prihlaseny uzivatel
data = self.getsessiondata(sessionid)
if data is None:
html = '<h1>timeout</h1>'
else:
html = '<h1>your data: %s' % data
else:
# formular pro prihlaseni
html = HTMLloginform
return HTMLheader + html + HTMLfooter
cherrypy.quickstart(Login(), config="login.conf")
honza.
3.6.07, Vladislav Ludík <vlada na ludik.cz>:
>
> Jan Jakubuv napsal(a):
>
> *cherrypy.request.remote.ip vrací: /localhost/
>
> cherrypy.request.remote vrací: /http.Host('localhost', 1111, 'localhost')/
>
>
> u me vsechno funguje jak ma. request.remote mi vraci instanci Host
> odpovidajici volajici strane. prvni polozka by mela by urcite
> _ciselna_ ip adresa, jste si jisty, ze volate spravnou funkci?
> zkousite to na lokalni siti nebo na Internetu? mate posledni verzi
> cherrypy?
>
> honza.
>
> Je sice pravda, že přes víkend jsem na VPN-ce a přímo na lokální síti jsem
> to zatím nezkoušel.
>
> Ale i tak moje IP adresa je reálná přes VPN připojení z lokální sítě:
>
> Adaptér pro protokol PPP :
>
> Přípona DNS podle připojení . . . :
> Popis . . . . . . . . . . . . . . : WAN (PPP/SLIP) Interface
> Fyzická Adresa. . . . . . . . . . : 00-53-45-00-00-00
> Protokol DHCP povolen . . . . . . : Ne
> Adresa IP . . . . . . . . . . . . : 192.168.1.212
> Maska podsítě . . . . . . . . . . : 255.255.255.255
> Výchozí brána . . . . . . . . . . :
> Servery DNS . . . . . . . . . . . : 192.168.1.1
> Primární server WINS. . . . . . . : 192.168.1.1
>
> VL
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
Další informace o konferenci Python