由于公司外网地址是动态变化的,但又必须做到仅公司能访问,以下是实现方式
获取公司外网ip
#!/usr/local/bin/python3
# coding:utf-8
# ====================================================
# Author: chang - EMail:changbo@hmg100.com
# Last modified: 2017-04-28
# Filename: getoutip.py
# Description: get out ip,base requests ,json, time, pymysql, socket
# blog:http://www.cnblogs.com/changbo
# ====================================================
# import socket
# import requests
# import json
import time
import pymysql
import socket
port = xxxx
host = 'x.x.x.x'
def getOut():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
data = 'hi'
s.send(str(data).encode('utf-8'))
results = s.recv(1024)
getip = str(results, 'utf-8')
s.close()
nowtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
db = pymysql.connect('x.x.x.x', 'root', 'xxxxx', 'yunwei')
# print(nowtime)
# url = "https://ipinfo.io"
iplist = []
# r = requests.get(url)
# getip = json.loads(r.text)
sql1 = 'select ip from wan_ip'
sql2 = "INSERT INTO wan_ip(ip, time) VALUES('%s', '%s')" % (getip, nowtime)
cursor = db.cursor()
cursor.execute(sql1)
datad = cursor.fetchall()
for i in datad:
iplist.append(i[0])
if getip not in iplist:
cursor.execute(sql2)
db.commit()
db.close()
def getOutwan():
time.sleep(120)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
data = 'hi'
s.send(str(data).encode('utf-8'))
results = s.recv(1024)
getip = str(results, 'utf-8')
s.close()
nowtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
db = pymysql.connect('x.x.x.x', 'xxxx', 'xxxx', 'yunwei')
# print(nowtime)
# url = "https://ipinfo.io"
iplist = []
# r = requests.get(url)
# getip = json.loads(r.text)
sql1 = 'select ip from wan_ip'
sql2 = "INSERT INTO wan_ip(ip, time) VALUES('%s', '%s')" % (getip, nowtime)
cursor = db.cursor()
cursor.execute(sql1)
datad = cursor.fetchall()
for i in datad:
iplist.append(i[0])
if getip not in iplist:
cursor.execute(sql2)
db.commit()
db.close()
if __name__ == '__main__':
getOut()
getOutwan()
发送公网外网ip
#!/usr/local/bin/python3 import socket import threading # ==================================================== # Author: chang - EMail:changbo@hmg100.com # Last modified: 2017-04-28 # Filename: sendoutip.py # Description: send u out ip ,base socket # blog:http://www.cnblogs.com/changbo # ==================================================== port = xxxx host = 'x.x.x.x' def sendOut(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(5) while True: connection, address = s.accept() ip, _ = address ip = (str(ip)).encode('utf-8') while True: try: data = connection.recv(1024) if not data: break connection.send(ip) except Exception as e: pass # s.close() connection.close() continue s.close() if __name__ == '__main__': t = threading.Thread(target=sendOut) t.start()
自动修改nginx可访问ip
#!/usr/local/bin/python3 # coding:utf-8 # ==================================================== # Author: chang - EMail:changbo@hmg100.com # Last modified: 2017-04-28 # Filename: changehoutaiip.py # Description: change nginx access web ip,base re ,pymysql, subprocess # blog:http://www.cnblogs.com/changbo # ==================================================== import re import pymysql import subprocess def GetNginxAddr(): with open('/var/openresty/nginx/conf/nginx.conf') as f: lines = f.readlines() for line in lines: temline = line.split(')') if '$remote_addr !~* ' in temline[0] and '#' not in temline[0]: ipadd = re.findall(r'\d+.\d+.\d+.\d+', temline[0]) return ipadd[0] # print(GetNginxAddr()) def GetNowWanAddr(): db = pymysql.connect('x.x.x.x', 'xxxx', 'xxxx', 'yunwei') sql1 = 'select ip from wan_ip ORDER by id desc limit 1' cursor = db.cursor() cursor.execute(sql1) datad = cursor.fetchone() datad = '%s' % datad return datad # print(GetNowWanAddr()) oldip = GetNginxAddr() newip = GetNowWanAddr() # print(oldip, newip) def alter(file, oldstr, newstr): file_data = "" if oldstr != newstr: with open(file) as f: lines = f.readlines() for line in lines: temline = line.split(')') if '$remote_addr !~* ' in temline[0] and '#' not in temline[0]: line = line.replace("if ($remote_addr !~* '" + oldip + "'){", "if ($remote_addr !~* '" + newip + "'){") file_data += line with open(file, "w") as f: f.write(file_data) subprocess.Popen("/var/openresty/nginx/sbin/nginx -s reload", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) else: pass alter("/var/openresty/nginx/conf/nginx.conf", oldip, newip)
END!