Python 获取外网地址,有的说用bs4爬取138,有的说读取自己路由器网页地址。这两个方法都行就是工作量太大还麻烦。就想起自己以前学习NAT打洞的时候有个协议叫stun。
NAT会话穿越应用程序STUN(Session Traversal Utilities for NAT)是一种由RFC定义的网络协议,用于检测网络中是否存在NAT设备,并获取两个通信端点经NAT设备分配的IP地址和端口号。然后在两个通信端点之间建立一条可穿越NAT的P2P链接,实现P2P通信,这一过程也被形象的称为“打洞”。STUN无需现有NAT设备做任何改动,只需在组网中部署一台STUN服务器,操作起来比较简单,因此得到广泛应用。
STUN是标准协议,网上有很多服务器。python 的stun 叫pystun 有个更简单的应用叫pynat
只需要 pip install pynat
from pynat import get_ip_info
topology, ext_ip, ext_port = get_ip_info()
ipv4=ext_ip
获取IPv6 global 直接读网卡ifconfig并正则表达式匹配就好了
import IPy
import smtplib
def getIPv6Address():
output=os.popen("ifconfig").read()
#output=open("ip5.txt").read()
for i in output.split("\n"):
if re.match("\s*inet6 addr:\s*(([a-f0-9]{0,4}:){0,7}[a-f0-9]{1,4}).*Global",i):
ip=re.findall("inet6 addr:\s*(([a-f0-9]{0,4}:){0,7}[a-f0-9]{1,4}).*Global",i)
try:
IPy.IP(ip[0][0])
return ip[0][0]
except:
continue
return ""
ipv6=getIPv6Address()
发邮件使用smtp是可以匿名投递的,就跟现实中的邮箱一样你可以直接投递。、
主要问题是反垃圾邮件的SPF检查。MSG可以直接用文字ASC嘛不用多媒体格式就直接用字符串就好了
msg主要就是会不合法,被反垃圾邮件拦下来。目前还没找到拦下来的原因。
import mimetypes
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders
from email.message import EmailMessage
msg='To:xxx@qq.com'+'\r\n'+\
'From:xxx@xxx.com.cn'+'\r\n'+\
'Subject:NAS-IP\r\n\r\nip4x'+ipv4+"\nip6x"+ipv6+"\r\n\r\n"
server = smtplib.SMTP(host="mail.qq.com",port=25)
server.ehlo(name="xxx.com.cn")#告诉服务器你是谁
server.sendmail("xxx@xxx.com.cn", "xxx@qq.com", msg)