Уровень 0: необходимо подключиться к vortex.labs.overthewire.org:5842, прочитать 4 uint32 и добавить их, а при ответе мы получим имя пользователя и пароль.
Я хотел сделать это на golang, так как это соответствует моей цели понять внутреннее устройство сети и пойти по пути их реализации.
Просто использование net.Dial помогло мне подключиться к этому хосту и порту, я попытался прочитать соединение с помощью bufio.Reader, но не был уверен, как читать на основе порядка байтов. При поиске по запросу «чтение с прямым порядком байтов в голанге» большинство результатов указывало на использование «кодировка / двоичный код».
Наконец, после небольшого синтаксиса все готово и работает.
package main import ( "bufio" "encoding/binary" "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "vortex.labs.overthewire.org:5842") if err != nil { fmt.Println("Error occured :", err) } var val int64 = 0 values := make([]uint32, 4) err = binary.Read(conn, binary.LittleEndian, &values) if err != nil { fmt.Println("Error occured :", err) } for i := 0; i < 4; i++ { val += int64(values[i]) } binary.Write(conn, binary.LittleEndian, val) res, err := bufio.NewReader(conn).ReadString('\n') if err != nil { fmt.Println("Error occured :", err) } fmt.Println(res) }