<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8python%E6%A3%80%E6%B5%8B%E8%BF%9C%E7%A8%8B_IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%8F%AF%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%92%89%E9%92%89%E6%8A%A5%E8%AD%A6</id>
	<title>利用python检测远程 IP和端口是否可连接并钉钉报警 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8python%E6%A3%80%E6%B5%8B%E8%BF%9C%E7%A8%8B_IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%8F%AF%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%92%89%E9%92%89%E6%8A%A5%E8%AD%A6"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=%E5%88%A9%E7%94%A8python%E6%A3%80%E6%B5%8B%E8%BF%9C%E7%A8%8B_IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%8F%AF%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%92%89%E9%92%89%E6%8A%A5%E8%AD%A6&amp;action=history"/>
	<updated>2026-04-17T03:48:57Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=%E5%88%A9%E7%94%A8python%E6%A3%80%E6%B5%8B%E8%BF%9C%E7%A8%8B_IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%8F%AF%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%92%89%E9%92%89%E6%8A%A5%E8%AD%A6&amp;diff=1220&amp;oldid=prev</id>
		<title>Evan：​/* pre */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=%E5%88%A9%E7%94%A8python%E6%A3%80%E6%B5%8B%E8%BF%9C%E7%A8%8B_IP%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E5%8F%AF%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%92%89%E9%92%89%E6%8A%A5%E8%AD%A6&amp;diff=1220&amp;oldid=prev"/>
		<updated>2025-05-31T07:46:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;pre&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=利用python检测远程 IP和端口是否可连接 并dingtalk 报警=&lt;br /&gt;
=pre=&lt;br /&gt;
&lt;br /&gt;
如果不是很重要的场景,记得要配 ding关键字 关键词 一般建议英文  我这里用 anomaly&lt;br /&gt;
&lt;br /&gt;
create 一个dingding 群 --&amp;gt; 在群里 添加机器人 --&amp;gt; 选择类型为  自定义 （通过webhook），并记下你的 token url 下面要用&lt;br /&gt;
&lt;br /&gt;
=code=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat  /home/evan/scr/chk-port.py &lt;br /&gt;
import socket &lt;br /&gt;
import yaml &lt;br /&gt;
import requests &lt;br /&gt;
from datetime import datetime &lt;br /&gt;
&lt;br /&gt;
DING_WEBHOOK =&amp;quot;https://oapi.dingtalk.com/robot/send?access_token=4578bcd63ad05f3a315ef4f971c7defe9990ef0adc47f804c3273371a7355555&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def load_from_yaml(file_path):&lt;br /&gt;
    with open(file_path,&amp;#039;r&amp;#039;) as f:&lt;br /&gt;
        data = yaml.safe_load(f)&lt;br /&gt;
        return data.get(&amp;quot;targets&amp;quot;,[])&lt;br /&gt;
&lt;br /&gt;
def check_port(host,port,timeout=4):&lt;br /&gt;
    try:&lt;br /&gt;
        with socket.create_connection((host,port),timeout=timeout):&lt;br /&gt;
            return True&lt;br /&gt;
    except:&lt;br /&gt;
        return False&lt;br /&gt;
    &lt;br /&gt;
def send_ding_alert(message):&lt;br /&gt;
    headers = {&amp;#039;Content-Type&amp;#039;: &amp;#039;application/json;charset=utf-8&amp;#039;}&lt;br /&gt;
    data = {&lt;br /&gt;
        &amp;quot;msgtype&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;text&amp;quot;: {&lt;br /&gt;
            &amp;quot;content&amp;quot;: message&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        requests.post(DING_WEBHOOK, headers=headers, json=data,timeout=4)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Failed to send dingtalk alert: {str(e)}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    ips = load_from_yaml(&amp;quot;/home/evan/scr/ips.yaml&amp;quot;)&lt;br /&gt;
    down_list = []&lt;br /&gt;
&lt;br /&gt;
    for item in ips:&lt;br /&gt;
        host = item[&amp;quot;host&amp;quot;]&lt;br /&gt;
        port = item[&amp;quot;port&amp;quot;]&lt;br /&gt;
        if not check_port(host,port):&lt;br /&gt;
            down_list.append(f&amp;quot;{host}:{port}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if down_list:&lt;br /&gt;
        now = datetime.now().strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
        msg = f&amp;quot;[{now}] Port detection anomaly端口检测异常:\n&amp;quot; + &amp;quot;\n&amp;quot;.join(down_list)&lt;br /&gt;
        #print(msg)&lt;br /&gt;
        #print(down_list)&lt;br /&gt;
        send_ding_alert(msg)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;All ports are up.&amp;quot;)&lt;br /&gt;
        send_ding_alert(&amp;quot;All ports are up.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__== &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
    #send_ding_alert(&amp;quot;这是测试消息&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat ips.yaml &lt;br /&gt;
targets:&lt;br /&gt;
  - host: 45.192.18.733&lt;br /&gt;
    port: 7100&lt;br /&gt;
  - host: 45.192.18.733&lt;br /&gt;
    port: 7101&lt;br /&gt;
  - host: 45.192.18.733&lt;br /&gt;
    port: 7148&lt;br /&gt;
  - host: 45.192.18.733&lt;br /&gt;
    port: 7149&lt;br /&gt;
&lt;br /&gt;
Usage&lt;br /&gt;
&lt;br /&gt;
*/4  * * * * /usr/bin/python3 /home/evan/scr/chk-port.py &amp;gt;&amp;gt; /home/evan/port_checker.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:python]] [[category:devops]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>