app.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import ipdb, ipaddress
  2. from flask import Flask, request, render_template, jsonify
  3. from socket import gethostbyname
  4. db = ipdb.BaseStation("qqwry.ipdb")
  5. app = Flask(__name__)
  6. def iplocated(ip):
  7. city = db.find(ip, "CN")
  8. return ip + " @" + city[0] + city[1] + city[2] + city[3] + "\n"
  9. def getip():
  10. ip = request.remote_addr
  11. try:
  12. _ip = request.headers["X-Real-IP"]
  13. if _ip is not None:
  14. ip = _ip
  15. except Exception as e:
  16. print(e)
  17. return ip
  18. @app.route("/")
  19. def hello():
  20. ip = getip()
  21. return ip
  22. @app.route("/ip/")
  23. @app.route("/ip/<ipaddr>")
  24. def show_ip(ipaddr=None):
  25. # ip 地址为空获得浏览器客户端IP
  26. if ipaddr is None:
  27. ip = getip()
  28. ipaddr = iplocated(ip)
  29. return render_template('hello.html', ip=ip, ipaddr=ipaddr)
  30. else:
  31. ip = ipaddr
  32. # ip地址 从纯真IP数据库 搜索城市定位
  33. try:
  34. ipaddress.ip_address(ip).is_global
  35. ipaddr = iplocated(ip)
  36. except:
  37. try:
  38. ip = gethostbyname(ip) # 域名反解析得到的IP
  39. ipaddr = iplocated(ip)
  40. except Exception as e:
  41. print(e)
  42. return ipaddr
  43. if __name__ == '__main__':
  44. app.run(host='0.0.0.0')
  45. # export FLASK_ENV=development # 调试模式: 修改代码不用重启服务
  46. # flask run --host=0.0.0.0 # 监听所有公开的 IP