def _ip_check(self, ip_addr): "check ip exist or not and return ip object" t_sql = Ip.select().where(Ip.addr == ip_addr) if t_sql.count(): return t_sql[0] else: return Ip.create(addr=ip_addr, country='default')
def shorten(): long_url = request.args.get("url") token = request.args.get("token") format = request.args.get("format", "simple") ip = request.headers.get("X-Forwarded-For") if rate_limit_exceeded(ip, token): if format == "html": return redirect_and_flash( render_template("rate_limit_exceeded.html")) else: abort(429) url = Url(url=long_url) url.save() log_ip = Ip(ip=ip, token=token, time=datetime.now()) log_ip.save() root_url = url_for("index", _external=True, _scheme="https") slug = short_url.encode_url(url.id) new_url = root_url + slug print(new_url) if format == "html": return redirect_and_flash( render_template("new_url.html", new_url=new_url)) elif format == "json": return jsonify(url=new_url) return new_url
def saveIp(ip): """ ip统计,将ip的地点入库; sina的api """ if web.config.debug: d = {'country': u'书记', 'province': u'书记', 'city': u'书记'} else: url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=%s' % ip d = json.loads(urllib2.urlopen(url).read()) try: position = d['country'] + '@' + d['province'] + '@' + d['city'] except KeyError: position = '@@' try: city = sql_session.query(Ip).filter_by(ip=ip)[0] city.visit += 1 except IndexError: city = Ip(ip, 1, position) sql_session.add(city) sql_session.commit() return d['city']
def build_first_db(): """ Populate a small db with some example entries. """ db.drop_all() db.create_all() anonymous = Role(name=u'Anonymous', description=u'匿名用户') admin = Role(name=u'Admin', description=u'管理员') develop = Role(name='Develop', description=u'开发人员') test = Role(name='Test', description=u'测试人员') ops = Role(name='Ops', description=u'运维人员') admin_user = User(real_name=u'admin', email=u'*****@*****.**', login=u"admin", password=generate_password_hash(u"admin"), roles=[admin]) anonymous_user = User(real_name=u'anonymous', email=u'*****@*****.**', login=u"anonymous", password=generate_password_hash(u"anonymous"), roles=[anonymous]) ip1 = Ip( isp=u'电信', use=u'在用', ip=u"1.1.1.1", mask=(u"255.255.255.0"), mac=(u"44a8-422a-20ff"), route=(u"1.1.1.254"), switch_port=(u"5F-U09 G1/0/32"), ) ip2 = Ip( isp=u'电信', use=u'在用', ip=u"1.1.1.2", mask=(u"255.255.255.0"), mac=(u"44a8-422a-20ff"), route=(u"1.1.1.254"), switch_port=(u"5F-U09 G1/0/32"), ) ip3 = Ip( isp=u'内网', use=u'在用', ip=u"1.1.1.3", mask=(u"255.255.255.0"), mac=(u"44a8-422a-20ff"), route=(u"1.1.1.254"), switch_port=(u"5F-U09 G1/0/32"), ) ip4 = Ip( isp=u'联通', use=u'在用', ip=u"1.1.1.4", mask=(u"255.255.255.0"), mac=(u"44a8-422a-20ff"), route=(u"1.1.1.254"), switch_port=(u"5F-U09 G1/0/32"), ) app1 = App( app=u'kf_scsa', description=u"客服我也不知道", ps=(u"没什么事"), ) app2 = App( app=u'gamemanager', description=u"游戏我也不知道", ps=(u"没什么事"), ) app3 = App( app=u'webPlatform', description=u"公共我也不知道", ps=(u"没什么事"), ) app4 = App( app=u'wechat-server2', description=u"wx我也不知道", ps=(u"没什么事"), ) project1 = Project(project=u'体彩项目', apps=[app1]) project2 = Project(project=u'福彩项目', apps=[app2]) project3 = Project(project=u'公共平台项目', apps=[app3]) project4 = Project(project=u'客服系统项目', apps=[app4]) device1 = Device( device_num=u'02-1331', device_name=u'5F-U10', idc=u"东莞", location=(u"5F-U10"), hardware_type=(u"DELL-2U"), brand=(u"DELL"), fast_repair_code=(u"没什么事"), cpu=(u"没什么事"), memory=(u"没什么事"), disk=(u"没什么事"), ips=[ip1], apps=[app1], ) device2 = Device( device_num=u'02-1331', device_name=u'5F-U12', idc=u"东莞", location=(u"5F-U10"), hardware_type=(u"DELL-2U"), brand=(u"DELL"), fast_repair_code=(u"没什么事"), cpu=(u"没什么事"), memory=(u"没什么事"), disk=(u"没什么事"), ips=[ip2], apps=[app2], ) platforms_info1 = Platforms_info( platform=u'阿里云管理控制台', description=u'申请云服务器及域名解析', url=u"http://www.aliyun.com/", username=u"hhlyadmin", password=(u"hhlyadmin"), ps=(u"登陆进入后,依次点击:\ 订单管理-我的租用-最后面详细\ 下方图标-进入之后\ 点击IP即可查看流量图"), ) platforms_info2 = Platforms_info( platform=u'DNS盾', description=u'13322.com域名A记录解析网站', url=u"http://www.dnsdun.com", username=u"*****@*****.**", password=(u"*****@*****.**"), ps=(u"登陆进入后"), ) db.session.add(anonymous) db.session.add(admin) db.session.add(develop) db.session.add(test) db.session.add(ops) db.session.add(admin_user) db.session.add(anonymous_user) db.session.add(ip1) db.session.add(ip2) db.session.add(ip3) db.session.add(ip4) db.session.add(app1) db.session.add(app2) db.session.add(app3) db.session.add(app4) db.session.add(project1) db.session.add(project2) db.session.add(project3) db.session.add(project4) db.session.add(device1) db.session.add(device2) db.session.add(platforms_info1) db.session.add(platforms_info2) db.session.commit() return
def rate_limit_exceeded(ip, token): Ip.delete().where(Ip.time < datetime.now() + timedelta(hours=-1)).execute() count = Ip.select().where(Ip.ip == ip).count() print(ip + " - " + str(count)) return count >= URLS_PER_IP_PER_HOUR