package main import ( "encoding/json" "fmt" "net/http" "strings" "time" ) const ( studentName = "Аникин Илья Дмитриевич" groupNumber = "Группа 714" ipServiceURL = "https://api.ipify.org?format=json" ) type IPResponse struct { IP string `json:"ip"` } func main() { http.HandleFunc("/", homeHandler) // Главная страница http.HandleFunc("/ok", okHandler) http.HandleFunc("/info", infoHandler) http.HandleFunc("/status", statusHandler) fmt.Println("Сервер запущен на порту 8080...") if err := http.ListenAndServe(":8080", nil); err != nil { fmt.Println("Ошибка при запуске сервера:", err) } } func homeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, ` Главная страница

Добро пожаловать!

Выберите страницу:

`) } func okHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintln(w, ` Статус OK

Статус: OK

`) } func infoHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, ` Информация о студенте

Информация о студенте

Студент: %s

Номер группы: %s

`, studentName, groupNumber) } func statusHandler(w http.ResponseWriter, r *http.Request) { ip, err := getExternalIP() if err != nil { http.Error(w, "Не удалось получить внешний IP-адрес", http.StatusInternalServerError) return } // Скрываем 2 и 3 октеты IP-адреса ipParts := splitIP(ip) if len(ipParts) == 4 { ip = fmt.Sprintf("%s.*.*.%s", ipParts[0], ipParts[3]) } currentTime := time.Now().Format("2006-01-02 3:4:5 pm") fmt.Fprintf(w, ` Статус

Статус

IP-адрес: %s

ФИО студента: %s

Текущее время: %s

`, ip, studentName, currentTime) } func getExternalIP() (string, error) { resp, err := http.Get(ipServiceURL) if err != nil { return "", err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return "", fmt.Errorf("ошибка при получении IP: %s", resp.Status) } var ipResponse IPResponse if err := json.NewDecoder(resp.Body).Decode(&ipResponse); err != nil { return "", err } return ipResponse.IP, nil } func splitIP(ip string) []string { return strings.Split(ip, ".") }