3월 6, 2026

#Dev_4 Proxmox send_ip.py

해당 내용은 #Dev_3 에서 사용한 send_ip.py의 코드를 다루고 있음.

import json
import ssl
import sys
import subprocess
import time
from urllib.request import Request, urlopen

# --- 설정 정보 ---
TOKEN = ''
CHAT_ID = ''


# --- 텔레그램 전송 함수 ---
def sendMSG(message):
    url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"

    data = json.dumps({
        'chat_id': CHAT_ID,
        'text': message,
        'parse_mode': 'HTML'
    }).encode('utf-8')

    # SSL 인증 무시용 context
    context = ssl._create_unverified_context()

    req = Request(url, data=data, headers={'Content-Type': 'application/json'})

    try:
        with urlopen(req, context=context) as response:
            print("Message sent successfully.")
    except Exception as e:
        print(f"Error sending message: {e}")


# --- vmbr0 IP 가져오는 함수 ---
def get_vmbr0_ip():
    try:
        # 리눅스 명령어(ip a)를 실행해서 vmbr0의 IP만 깔끔하게 가져옵니다.
        cmd = "ip -4 addr show vmbr0 | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'"
        ip = subprocess.check_output(cmd, shell=True).decode('utf-8').strip()
        return ip
    except Exception as e:
        return f"IP를 찾을 수 없음 ({e})"


# --- 메인 실행 ---
if __name__ == "__main__":
    # 네트워크가 완전히 붙을 때까지 안전하게 잠시 대기 (스크립트 내에서도 처리)
    time.sleep(10)

    current_ip = get_vmbr0_ip()
    msg = f"<b>[Proxmox 부팅 완료]</b>\n\n현재 IP: <code>{current_ip}</code>\n접속 가능합니다."

    sendMSG(msg)

현재는 해당 코드에 tailscale 내부 IP와 pinggy를 추가하여 /pinggy 명령어를 보내면 외부에서도 접근이 가능하도록 pinggy로 임시url을 받은후 봇으로 전송해주는 기능도 추가하여 사용하고 있다.