Уровень 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)
}