2022-04-07 如何用Python 获取外网地址并发邮件

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:[email protected]'+'\r\n'+\
'From:[email protected]'+'\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("[email protected]", "[email protected]", msg)

你可能感兴趣的:(2022-04-07 如何用Python 获取外网地址并发邮件)