import
psutil
import
getpass
import
time
import
zmail
import
configparser
import
socket
def
get_remote_ips(port, wl_list):
remote_ips
=
[conn.raddr[
0
]
for
conn
in
psutil.net_connections()
if
conn.raddr
and
conn.status
=
=
'ESTABLISHED'
and
not
conn.raddr[
0
].startswith(
'127.'
)
and
':'
not
in
conn.raddr[
0
]
and
conn.laddr[
1
]
=
=
port
]
remote_ips
=
list
(
set
(remote_ips))
if
not
remote_ips
or
any
(ip.startswith(wl)
for
ip
in
remote_ips
for
wl
in
wl_list
if
wl):
return
[]
return
remote_ips
def
send_mail(remote_ips, config):
aa1, aa2
=
socket.gethostname(), getpass.getuser()
aa3
=
time.strftime(
"%Y-%m-%d %H:%M:%S"
, time.localtime())
ip_list
=
[ip
+
'\n'
for
ip
in
remote_ips]
content
=
(
'<font size="4">检测时间: {}<br>'
.
format
(aa3)
+
'主机名: {}<br>'
.
format
(aa1)
+
'用户名: {}<br>'
.
format
(aa2)
+
'连接端口 "{}" 的IP地址:<br></font>'
.
format
(port)
+
'<b><font color="#ff0000" size="5">{}</font></b><br>'
.
format
(
'<br>'
.join(ip_list))
+
'<a >查询IP归属地</a>'
.
format
(
'<br>'
.join(ip_list))
)
from_addr, pwd
=
config.get(
'Mail'
,
'from_addr'
), config.get(
'Mail'
,
'pwd'
)
title
=
config.get(
'Mail'
,
'title'
)
to_addr
=
config.get(
'to_addr'
,
'add'
).split(
','
)
server
=
zmail.server(from_addr, pwd)
server.send_mail(to_addr, {
'subject'
: title,
'content_html'
: content})
config
=
configparser.ConfigParser()
config.read(
'Mail.ini'
, encoding
=
"utf-8-sig"
)
wl_list
=
config.get(
'WL'
,
'add'
).split(
','
)
port
=
int
(config.get(
"port"
,
"net_port"
))
remote_ips
=
get_remote_ips(port, wl_list)
if
remote_ips:
send_mail(remote_ips, config)