checker: deduce basechellenge from tunnel version
This commit is contained in:
parent
b695eeb748
commit
e1ee8d76ee
2 changed files with 34 additions and 9 deletions
|
@ -13,7 +13,6 @@ import (
|
||||||
"git.nemunai.re/lectures/adlin/libadlin"
|
"git.nemunai.re/lectures/adlin/libadlin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var baseChallenge = 100
|
|
||||||
var verbose = false
|
var verbose = false
|
||||||
|
|
||||||
// ICMP
|
// ICMP
|
||||||
|
@ -74,12 +73,33 @@ func check_https(domain, ip string) (err error) {
|
||||||
|
|
||||||
// Main
|
// Main
|
||||||
|
|
||||||
|
func minTunnelVersion(std adlin.Student) (int, error) {
|
||||||
|
tunnels, err := std.GetTunnelTokens()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var minversion int = 2147483647
|
||||||
|
for _, tunnel := range tunnels {
|
||||||
|
if tunnel.Version == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if tunnel.Dump != nil && tunnel.Version < minversion {
|
||||||
|
minversion = tunnel.Version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return minversion, nil
|
||||||
|
}
|
||||||
|
|
||||||
func studentsChecker() {
|
func studentsChecker() {
|
||||||
students, err := adlin.GetStudents()
|
students, err := adlin.GetStudents()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Unable to check students:", err)
|
log.Println("Unable to check students:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Println("Checking students...")
|
||||||
|
|
||||||
for _, s := range students {
|
for _, s := range students {
|
||||||
time.Sleep(250 * time.Millisecond)
|
time.Sleep(250 * time.Millisecond)
|
||||||
|
@ -87,18 +107,24 @@ func studentsChecker() {
|
||||||
std := s
|
std := s
|
||||||
stdIP := adlin.StudentIP(std.Id).String() + "1"
|
stdIP := adlin.StudentIP(std.Id).String() + "1"
|
||||||
go check_ping(stdIP, func(pkt *ping.Packet) {
|
go check_ping(stdIP, func(pkt *ping.Packet) {
|
||||||
|
tunnel_version, err := minTunnelVersion(std)
|
||||||
if verbose {
|
if verbose {
|
||||||
log.Printf("%s PONG\n", std.Login)
|
log.Printf("%s PONG; version=%d (%v)\n", std.Login, tunnel_version, err)
|
||||||
}
|
}
|
||||||
std.OnPong(true)
|
std.OnPong(true)
|
||||||
|
|
||||||
|
if tunnel_version == 2147483647 || tunnel_version == 0 {
|
||||||
|
log.Printf("%s unknown tunnel version: %d skipping tests (%v)", std.Login, tunnel_version, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Check HTTP
|
// Check HTTP
|
||||||
if err := check_http(stdIP); err == nil {
|
if err := check_http(stdIP); err == nil {
|
||||||
if verbose {
|
if verbose {
|
||||||
log.Printf("%s just unlocked HTTP challenge\n", std.Login)
|
log.Printf("%s just unlocked HTTP challenge\n", std.Login)
|
||||||
}
|
}
|
||||||
if _, err := std.UnlockNewChallenge(baseChallenge+0, ""); err != nil {
|
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+0, ""); err != nil {
|
||||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+0, ""); err != nil {
|
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+0, ""); err != nil {
|
||||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,8 +135,8 @@ func studentsChecker() {
|
||||||
if verbose {
|
if verbose {
|
||||||
log.Printf("%s just unlocked HTTPS challenge\n", std.Login)
|
log.Printf("%s just unlocked HTTPS challenge\n", std.Login)
|
||||||
}
|
}
|
||||||
if _, err := std.UnlockNewChallenge(baseChallenge+1, ""); err != nil {
|
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+1, ""); err != nil {
|
||||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+1, ""); err != nil {
|
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+1, ""); err != nil {
|
||||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,8 +147,8 @@ func studentsChecker() {
|
||||||
if verbose {
|
if verbose {
|
||||||
log.Printf("%s just unlocked DNS challenge\n", std.Login)
|
log.Printf("%s just unlocked DNS challenge\n", std.Login)
|
||||||
}
|
}
|
||||||
if _, err := std.UnlockNewChallenge(baseChallenge+2, ""); err != nil {
|
if _, err := std.UnlockNewChallenge(100*(tunnel_version-1)+2, ""); err != nil {
|
||||||
if _, err := std.UpdateUnlockedChallenge(baseChallenge+2, ""); err != nil {
|
if _, err := std.UpdateUnlockedChallenge(100*(tunnel_version-1)+2, ""); err != nil {
|
||||||
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
log.Printf("Unable to register challenge for %s: %s\n", std.Login, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server")
|
var dsn = flag.String("dsn", adlin.DSNGenerator(), "DSN to connect to the MySQL server")
|
||||||
flag.IntVar(&baseChallenge, "basechallenge", baseChallenge, "Base number for current challenges")
|
|
||||||
flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode")
|
flag.BoolVar(&verbose, "verbose", verbose, "Enable verbose mode")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
|
Reference in a new issue