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, `Студент: %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, ".") }