├── .gitignore ├── README.md ├── domainext.go ├── index.html ├── mail.go ├── main.go └── serverd.conf /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 2 | *.o 3 | *.a 4 | *.so 5 | 6 | # Folders 7 | _obj 8 | _test 9 | 10 | # Architecture specific extensions/prefixes 11 | *.[568vq] 12 | [568vq].out 13 | 14 | *.cgo1.go 15 | *.cgo2.c 16 | _cgo_defun.c 17 | _cgo_gotypes.go 18 | _cgo_export.* 19 | 20 | _testmain.go 21 | 22 | *.exe 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | domainpark 2 | ========== 3 | 4 | A simple domain park daemon by Golang 5 | 6 | ## How to build 7 | 8 | git clone https://github.com/forease/domainpark.git 9 | cd domainpark 10 | go build -o domainpark *.go 11 | 12 | ## How to run 13 | 14 | ./domainpark -c serverd.conf 15 | 16 | 17 | ## How to config 18 | 19 | 20 | [common] 21 | webport = 9090 # web server port 22 | 23 | 24 | [redis] 25 | host = localhost # redis host 26 | port = 6379 # redis port 27 | auth = 28 | db = 29 | 30 | [smtp] 31 | # send report smtp setup 32 | daemon = false 33 | host = smtp.gmail.com 34 | port = 587 35 | user = test@gmail.com 36 | password = testmail 37 | auth = true 38 | tls = true 39 | 40 | ## About 41 | 42 | 北京实易时代科技有限公司 43 | Beijing ForEase Times Technology Co., Ltd. 44 | http://www.forease.net 45 | 46 | 47 | ## Contact me 48 | 49 | Jonsen Yang 50 | im16hot#gmail.com (replace # with @) 51 | 52 | -------------------------------------------------------------------------------- /domainext.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | // "fmt" 5 | "strings" 6 | ) 7 | 8 | var domainext map[string]uint 9 | 10 | func getDomainRoot( d string ) ( string, uint ) { 11 | var retRoot, tar string 12 | var dlong, djump, tmptopid, topid uint 13 | var ok bool 14 | 15 | dm := strings.Split( d, "." ) 16 | // dl := len(dm) 17 | 18 | for i := len(dm) - 1; i >= 0; i-- { 19 | //fmt.Printf("%d, %s[%s]\n", i, dm[i], retRoot ) 20 | retRoot = dm[i] + tar + retRoot 21 | tar = "." 22 | ok = false 23 | 24 | // 判断当前域名是否为根域名 25 | //fmt.Println("retRoot: ", retRoot ) 26 | tmptopid, ok = domainext[ retRoot ] 27 | if ok { 28 | topid = tmptopid 29 | //fmt.Printf("%d: %s\n", topid, retRoot) 30 | if retRoot == "in-addr.arpa" { 31 | dlong = 2 32 | } else { 33 | dlong = 1 34 | } 35 | djump = 0 36 | } 37 | if dlong > 0 { 38 | if djump >= dlong { 39 | break 40 | } 41 | djump++ 42 | } 43 | 44 | } 45 | //fmt.Printf("retRoot: %s, dlong: %d, dj: %d rootid %d\n", retRoot, dlong, djump, topid ) 46 | return retRoot, topid 47 | } 48 | 49 | 50 | func initDomainExt() { 51 | 52 | domainext = make(map[string]uint) 53 | domainext["in-addr.arpa"] = 1; domainext["arpa"] = 2; domainext["asia"] = 3 54 | domainext["biz"] = 4; domainext["cat"] = 5; domainext["com"] = 6 55 | domainext["coop"] = 7; domainext["edu"] = 8; domainext["gov"] = 9 56 | domainext["info"] = 10; domainext["int"] = 11; domainext["jobs"] = 12 57 | domainext["mil"] = 13; domainext["mobi"] = 14; domainext["museum"] = 15 58 | domainext["name"] = 16; domainext["net"] = 17; domainext["org"] = 18 59 | domainext["pro"] = 19; domainext["tel"] = 20; domainext["travel"] = 21 60 | domainext["ac"] = 22; domainext["ad"] = 23; domainext["ae"] = 24 61 | domainext["af"] = 25; domainext["ag"] = 26; domainext["ai"] = 27 62 | domainext["al"] = 28; domainext["am"] = 29; domainext["an"] = 30 63 | domainext["ao"] = 31; domainext["aq"] = 32; domainext["ar"] = 33 64 | domainext["as"] = 34; domainext["at"] = 35; domainext["au"] = 36 65 | domainext["aw"] = 37; domainext["ax"] = 38; domainext["az"] = 39 66 | domainext["ba"] = 40; domainext["bb"] = 41; domainext["bd"] = 42 67 | domainext["be"] = 43; domainext["bf"] = 44; domainext["bg"] = 45 68 | domainext["bh"] = 46; domainext["bi"] = 47; domainext["bj"] = 48 69 | domainext["bl"] = 49; domainext["bm"] = 50; domainext["bn"] = 51 70 | domainext["bo"] = 52; domainext["bq"] = 53; domainext["br"] = 54 71 | domainext["bs"] = 55; domainext["bt"] = 56; domainext["bv"] = 57 72 | domainext["bw"] = 58; domainext["by"] = 59; domainext["bz"] = 60 73 | domainext["ca"] = 61; domainext["cc"] = 62; domainext["cd"] = 63 74 | domainext["cf"] = 64; domainext["cg"] = 65; domainext["ch"] = 66 75 | domainext["ci"] = 67; domainext["ck"] = 68; domainext["cl"] = 69 76 | domainext["cm"] = 70; domainext["cn"] = 71; domainext["co"] = 72 77 | domainext["cr"] = 73; domainext["cu"] = 74; domainext["cv"] = 75 78 | domainext["cw"] = 76; domainext["cx"] = 77; domainext["cy"] = 78 79 | domainext["cz"] = 79; domainext["de"] = 80; domainext["dj"] = 81 80 | domainext["dk"] = 82; domainext["dm"] = 83; domainext["do"] = 84 81 | domainext["dz"] = 85; domainext["ec"] = 86; domainext["ee"] = 87 82 | domainext["eg"] = 88; domainext["eh"] = 89; domainext["er"] = 90 83 | domainext["es"] = 91; domainext["et"] = 92; domainext["eu"] = 93 84 | domainext["fi"] = 94; domainext["fj"] = 95; domainext["fk"] = 96 85 | domainext["fm"] = 97; domainext["fo"] = 98; domainext["fr"] = 99 86 | domainext["ga"] = 100; domainext["gb"] = 101; domainext["gd"] = 102 87 | domainext["ge"] = 103; domainext["gf"] = 104; domainext["gg"] = 105 88 | domainext["gh"] = 106; domainext["gi"] = 107; domainext["gl"] = 108 89 | domainext["gm"] = 109; domainext["gn"] = 110; domainext["gp"] = 111 90 | domainext["gq"] = 112; domainext["gr"] = 113; domainext["gs"] = 114 91 | domainext["gt"] = 115; domainext["gu"] = 116; domainext["gw"] = 117 92 | domainext["gy"] = 118; domainext["hk"] = 119; domainext["hm"] = 120 93 | domainext["hn"] = 121; domainext["hr"] = 122; domainext["ht"] = 123 94 | domainext["hu"] = 124; domainext["id"] = 125; domainext["ie"] = 126 95 | domainext["il"] = 127; domainext["im"] = 128; domainext["in"] = 129 96 | domainext["io"] = 130; domainext["iq"] = 131; domainext["ir"] = 132 97 | domainext["is"] = 133; domainext["it"] = 134; domainext["je"] = 135 98 | domainext["jm"] = 136; domainext["jo"] = 137; domainext["jp"] = 138 99 | domainext["ke"] = 139; domainext["kg"] = 140; domainext["kh"] = 141 100 | domainext["ki"] = 142; domainext["km"] = 143; domainext["kn"] = 144 101 | domainext["kp"] = 145; domainext["kr"] = 146; domainext["kw"] = 147 102 | domainext["ky"] = 148; domainext["kz"] = 149; domainext["la"] = 150 103 | domainext["lb"] = 151; domainext["lc"] = 152; domainext["li"] = 153 104 | domainext["lk"] = 154; domainext["lr"] = 155; domainext["ls"] = 156 105 | domainext["lt"] = 157; domainext["lu"] = 158; domainext["lv"] = 159 106 | domainext["ly"] = 160; domainext["ma"] = 161; domainext["mc"] = 162 107 | domainext["md"] = 163; domainext["me"] = 164; domainext["mf"] = 165 108 | domainext["mg"] = 166; domainext["mh"] = 167; domainext["mk"] = 168 109 | domainext["ml"] = 169; domainext["mm"] = 170; domainext["mn"] = 171 110 | domainext["mo"] = 172; domainext["mp"] = 173; domainext["mq"] = 174 111 | domainext["mr"] = 175; domainext["ms"] = 176; domainext["mt"] = 177 112 | domainext["mu"] = 178; domainext["mv"] = 179; domainext["mw"] = 180 113 | domainext["mx"] = 181; domainext["my"] = 182; domainext["mz"] = 183 114 | domainext["na"] = 184; domainext["nc"] = 185; domainext["ne"] = 186 115 | domainext["nf"] = 187; domainext["ng"] = 188; domainext["ni"] = 189 116 | domainext["nl"] = 190; domainext["no"] = 191; domainext["np"] = 192 117 | domainext["nr"] = 193; domainext["nu"] = 194; domainext["nz"] = 195 118 | domainext["om"] = 196; domainext["pa"] = 197; domainext["pe"] = 198 119 | domainext["pf"] = 199; domainext["pg"] = 200; domainext["ph"] = 201 120 | domainext["pk"] = 202; domainext["pl"] = 203; domainext["pm"] = 204 121 | domainext["pn"] = 205; domainext["pr"] = 206; domainext["ps"] = 207 122 | domainext["pt"] = 208; domainext["pw"] = 209; domainext["py"] = 210 123 | domainext["qa"] = 211; domainext["re"] = 212; domainext["ro"] = 213 124 | domainext["rs"] = 214; domainext["ru"] = 215; domainext["rw"] = 216 125 | domainext["sa"] = 217; domainext["sb"] = 218; domainext["sc"] = 219 126 | domainext["sd"] = 220; domainext["se"] = 221; domainext["sg"] = 222 127 | domainext["sh"] = 223; domainext["si"] = 224; domainext["sj"] = 225 128 | domainext["sk"] = 226; domainext["sl"] = 227; domainext["sm"] = 228 129 | domainext["sn"] = 229; domainext["so"] = 230; domainext["sr"] = 231 130 | domainext["st"] = 232; domainext["su"] = 233; domainext["sv"] = 234 131 | domainext["sx"] = 235; domainext["sy"] = 236; domainext["sz"] = 237 132 | domainext["tc"] = 238; domainext["td"] = 239; domainext["tf"] = 240 133 | domainext["tg"] = 241; domainext["th"] = 242; domainext["tj"] = 243 134 | domainext["tk"] = 244; domainext["tl"] = 245; domainext["tm"] = 246 135 | domainext["tn"] = 247; domainext["to"] = 248; domainext["tp"] = 249 136 | domainext["tr"] = 250; domainext["tt"] = 251; domainext["tv"] = 252 137 | domainext["tw"] = 253; domainext["tz"] = 254; domainext["ua"] = 255 138 | domainext["ug"] = 256; domainext["uk"] = 257; domainext["um"] = 258 139 | domainext["us"] = 259; domainext["uy"] = 260; domainext["uz"] = 261 140 | domainext["va"] = 262; domainext["vc"] = 263; domainext["ve"] = 264 141 | domainext["vg"] = 265; domainext["vi"] = 266; domainext["vn"] = 267 142 | domainext["vu"] = 268; domainext["wf"] = 269; domainext["ws"] = 270 143 | domainext["ye"] = 271; domainext["yt"] = 272; domainext["za"] = 273 144 | domainext["zm"] = 274; domainext["zw"] = 275; domainext["ah.cn"] = 276 145 | domainext["bj.cn"] = 277; domainext["cq.cn"] = 278; domainext["fj.cn"] = 279 146 | domainext["gd.cn"] = 280; domainext["gs.cn"] = 281; domainext["gx.cn"] = 282 147 | domainext["gz.cn"] = 283; domainext["ha.cn"] = 284; domainext["hb.cn"] = 285 148 | domainext["he.cn"] = 286; domainext["hi.cn"] = 287; domainext["hk.cn"] = 288 149 | domainext["hl.cn"] = 289; domainext["hn.cn"] = 290; domainext["jl.cn"] = 291 150 | domainext["js.cn"] = 292; domainext["jx.cn"] = 293; domainext["ln.cn"] = 294 151 | domainext["mo.cn"] = 295; domainext["nm.cn"] = 296; domainext["nx.cn"] = 297 152 | domainext["qh.cn"] = 298; domainext["sc.cn"] = 299; domainext["sd.cn"] = 300 153 | domainext["sh.cn"] = 301; domainext["sn.cn"] = 302; domainext["sx.cn"] = 303 154 | domainext["tj.cn"] = 304; domainext["tw.cn"] = 305; domainext["xj.cn"] = 306 155 | domainext["xz.cn"] = 307; domainext["yn.cn"] = 308; domainext["zj.cn"] = 309 156 | domainext["ac.cn"] = 310; domainext["com.in-addr.arpa"] = 316; domainext["com.ac"] = 317 157 | domainext["com.ad"] = 318; domainext["com.ae"] = 319; domainext["com.af"] = 320 158 | domainext["com.ag"] = 321; domainext["com.ai"] = 322; domainext["com.al"] = 323 159 | domainext["com.am"] = 324; domainext["com.an"] = 325; domainext["com.ao"] = 326 160 | domainext["com.aq"] = 327; domainext["com.ar"] = 328; domainext["com.arpa"] = 329 161 | domainext["com.as"] = 330; domainext["com.asia"] = 331; domainext["com.at"] = 332 162 | domainext["com.au"] = 333; domainext["com.aw"] = 334; domainext["com.ax"] = 335 163 | domainext["com.az"] = 336; domainext["com.ba"] = 337; domainext["com.bb"] = 338 164 | domainext["com.bd"] = 339; domainext["com.be"] = 340; domainext["com.bf"] = 341 165 | domainext["com.bg"] = 342; domainext["com.bh"] = 343; domainext["com.bi"] = 344 166 | domainext["com.biz"] = 345; domainext["com.bj"] = 346; domainext["com.bl"] = 347 167 | domainext["com.bm"] = 348; domainext["com.bn"] = 349; domainext["com.bo"] = 350 168 | domainext["com.bq"] = 351; domainext["com.br"] = 352; domainext["com.bs"] = 353 169 | domainext["com.bt"] = 354; domainext["com.bv"] = 355; domainext["com.bw"] = 356 170 | domainext["com.by"] = 357; domainext["com.bz"] = 358; domainext["com.ca"] = 359 171 | domainext["com.cat"] = 360; domainext["com.cc"] = 361; domainext["com.cd"] = 362 172 | domainext["com.cf"] = 363; domainext["com.cg"] = 364; domainext["com.ch"] = 365 173 | domainext["com.ci"] = 366; domainext["com.ck"] = 367; domainext["com.cl"] = 368 174 | domainext["com.cm"] = 369; domainext["com.cn"] = 370; domainext["com.co"] = 371 175 | domainext["com.com"] = 372; domainext["com.coop"] = 373; domainext["com.cr"] = 374 176 | domainext["com.cu"] = 375; domainext["com.cv"] = 376; domainext["com.cw"] = 377 177 | domainext["com.cx"] = 378; domainext["com.cy"] = 379; domainext["com.cz"] = 380 178 | domainext["com.de"] = 381; domainext["com.dj"] = 382; domainext["com.dk"] = 383 179 | domainext["com.dm"] = 384; domainext["com.do"] = 385; domainext["com.dz"] = 386 180 | domainext["com.ec"] = 387; domainext["com.edu"] = 388; domainext["com.ee"] = 389 181 | domainext["com.eg"] = 390; domainext["com.eh"] = 391; domainext["com.er"] = 392 182 | domainext["com.es"] = 393; domainext["com.et"] = 394; domainext["com.eu"] = 395 183 | domainext["com.fi"] = 396; domainext["com.fj"] = 397; domainext["com.fk"] = 398 184 | domainext["com.fm"] = 399; domainext["com.fo"] = 400; domainext["com.fr"] = 401 185 | domainext["com.ga"] = 402; domainext["com.gb"] = 403; domainext["com.gd"] = 404 186 | domainext["com.ge"] = 405; domainext["com.gf"] = 406; domainext["com.gg"] = 407 187 | domainext["com.gh"] = 408; domainext["com.gi"] = 409; domainext["com.gl"] = 410 188 | domainext["com.gm"] = 411; domainext["com.gn"] = 412; domainext["com.gov"] = 413 189 | domainext["com.gp"] = 414; domainext["com.gq"] = 415; domainext["com.gr"] = 416 190 | domainext["com.gs"] = 417; domainext["com.gt"] = 418; domainext["com.gu"] = 419 191 | domainext["com.gw"] = 420; domainext["com.gy"] = 421; domainext["com.hk"] = 422 192 | domainext["com.hm"] = 423; domainext["com.hn"] = 424; domainext["com.hr"] = 425 193 | domainext["com.ht"] = 426; domainext["com.hu"] = 427; domainext["com.id"] = 428 194 | domainext["com.ie"] = 429; domainext["com.il"] = 430; domainext["com.im"] = 431 195 | domainext["com.in"] = 432; domainext["com.info"] = 433; domainext["com.int"] = 434 196 | domainext["com.io"] = 435; domainext["com.iq"] = 436; domainext["com.ir"] = 437 197 | domainext["com.is"] = 438; domainext["com.it"] = 439; domainext["com.je"] = 440 198 | domainext["com.jm"] = 441; domainext["com.jo"] = 442; domainext["com.jobs"] = 443 199 | domainext["com.jp"] = 444; domainext["com.ke"] = 445; domainext["com.kg"] = 446 200 | domainext["com.kh"] = 447; domainext["com.ki"] = 448; domainext["com.km"] = 449 201 | domainext["com.kn"] = 450; domainext["com.kp"] = 451; domainext["com.kr"] = 452 202 | domainext["com.kw"] = 453; domainext["com.ky"] = 454; domainext["com.kz"] = 455 203 | domainext["com.la"] = 456; domainext["com.lb"] = 457; domainext["com.lc"] = 458 204 | domainext["com.li"] = 459; domainext["com.lk"] = 460; domainext["com.lr"] = 461 205 | domainext["com.ls"] = 462; domainext["com.lt"] = 463; domainext["com.lu"] = 464 206 | domainext["com.lv"] = 465; domainext["com.ly"] = 466; domainext["com.ma"] = 467 207 | domainext["com.mc"] = 468; domainext["com.md"] = 469; domainext["com.me"] = 470 208 | domainext["com.mf"] = 471; domainext["com.mg"] = 472; domainext["com.mh"] = 473 209 | domainext["com.mil"] = 474; domainext["com.mk"] = 475; domainext["com.ml"] = 476 210 | domainext["com.mm"] = 477; domainext["com.mn"] = 478; domainext["com.mo"] = 479 211 | domainext["com.mobi"] = 480; domainext["com.mp"] = 481; domainext["com.mq"] = 482 212 | domainext["com.mr"] = 483; domainext["com.ms"] = 484; domainext["com.mt"] = 485 213 | domainext["com.mu"] = 486; domainext["com.museum"] = 487; domainext["com.mv"] = 488 214 | domainext["com.mw"] = 489; domainext["com.mx"] = 490; domainext["com.my"] = 491 215 | domainext["com.mz"] = 492; domainext["com.na"] = 493; domainext["com.name"] = 494 216 | domainext["com.nc"] = 495; domainext["com.ne"] = 496; domainext["com.net"] = 497 217 | domainext["com.nf"] = 498; domainext["com.ng"] = 499; domainext["com.ni"] = 500 218 | domainext["com.nl"] = 501; domainext["com.no"] = 502; domainext["com.np"] = 503 219 | domainext["com.nr"] = 504; domainext["com.nu"] = 505; domainext["com.nz"] = 506 220 | domainext["com.om"] = 507; domainext["com.org"] = 508; domainext["com.pa"] = 509 221 | domainext["com.pe"] = 510; domainext["com.pf"] = 511; domainext["com.pg"] = 512 222 | domainext["com.ph"] = 513; domainext["com.pk"] = 514; domainext["com.pl"] = 515 223 | domainext["com.pm"] = 516; domainext["com.pn"] = 517; domainext["com.pr"] = 518 224 | domainext["com.pro"] = 519; domainext["com.ps"] = 520; domainext["com.pt"] = 521 225 | domainext["com.pw"] = 522; domainext["com.py"] = 523; domainext["com.qa"] = 524 226 | domainext["com.re"] = 525; domainext["com.ro"] = 526; domainext["com.rs"] = 527 227 | domainext["com.ru"] = 528; domainext["com.rw"] = 529; domainext["com.sa"] = 530 228 | domainext["com.sb"] = 531; domainext["com.sc"] = 532; domainext["com.sd"] = 533 229 | domainext["com.se"] = 534; domainext["com.sg"] = 535; domainext["com.sh"] = 536 230 | domainext["com.si"] = 537; domainext["com.sj"] = 538; domainext["com.sk"] = 539 231 | domainext["com.sl"] = 540; domainext["com.sm"] = 541; domainext["com.sn"] = 542 232 | domainext["com.so"] = 543; domainext["com.sr"] = 544; domainext["com.st"] = 545 233 | domainext["com.su"] = 546; domainext["com.sv"] = 547; domainext["com.sx"] = 548 234 | domainext["com.sy"] = 549; domainext["com.sz"] = 550; domainext["com.tc"] = 551 235 | domainext["com.td"] = 552; domainext["com.tel"] = 553; domainext["com.tf"] = 554 236 | domainext["com.tg"] = 555; domainext["com.th"] = 556; domainext["com.tj"] = 557 237 | domainext["com.tk"] = 558; domainext["com.tl"] = 559; domainext["com.tm"] = 560 238 | domainext["com.tn"] = 561; domainext["com.to"] = 562; domainext["com.tp"] = 563 239 | domainext["com.tr"] = 564; domainext["com.travel"] = 565; domainext["com.tt"] = 566 240 | domainext["com.tv"] = 567; domainext["com.tw"] = 568; domainext["com.tz"] = 569 241 | domainext["com.ua"] = 570; domainext["com.ug"] = 571; domainext["com.uk"] = 572 242 | domainext["com.um"] = 573; domainext["com.us"] = 574; domainext["com.uy"] = 575 243 | domainext["com.uz"] = 576; domainext["com.va"] = 577; domainext["com.vc"] = 578 244 | domainext["com.ve"] = 579; domainext["com.vg"] = 580; domainext["com.vi"] = 581 245 | domainext["com.vn"] = 582; domainext["com.vu"] = 583; domainext["com.wf"] = 584 246 | domainext["com.ws"] = 585; domainext["com.ye"] = 586; domainext["com.yt"] = 587 247 | domainext["com.za"] = 588; domainext["com.zm"] = 589; domainext["com.zw"] = 590 248 | domainext["net.in-addr.arpa"] = 591; domainext["net.ac"] = 592; domainext["net.ad"] = 593 249 | domainext["net.ae"] = 594; domainext["net.af"] = 595; domainext["net.ag"] = 596 250 | domainext["net.ai"] = 597; domainext["net.al"] = 598; domainext["net.am"] = 599 251 | domainext["net.an"] = 600; domainext["net.ao"] = 601; domainext["net.aq"] = 602 252 | domainext["net.ar"] = 603; domainext["net.arpa"] = 604; domainext["net.as"] = 605 253 | domainext["net.asia"] = 606; domainext["net.at"] = 607; domainext["net.au"] = 608 254 | domainext["net.aw"] = 609; domainext["net.ax"] = 610; domainext["net.az"] = 611 255 | domainext["net.ba"] = 612; domainext["net.bb"] = 613; domainext["net.bd"] = 614 256 | domainext["net.be"] = 615; domainext["net.bf"] = 616; domainext["net.bg"] = 617 257 | domainext["net.bh"] = 618; domainext["net.bi"] = 619; domainext["net.biz"] = 620 258 | domainext["net.bj"] = 621; domainext["net.bl"] = 622; domainext["net.bm"] = 623 259 | domainext["net.bn"] = 624; domainext["net.bo"] = 625; domainext["net.bq"] = 626 260 | domainext["net.br"] = 627; domainext["net.bs"] = 628; domainext["net.bt"] = 629 261 | domainext["net.bv"] = 630; domainext["net.bw"] = 631; domainext["net.by"] = 632 262 | domainext["net.bz"] = 633; domainext["net.ca"] = 634; domainext["net.cat"] = 635 263 | domainext["net.cc"] = 636; domainext["net.cd"] = 637; domainext["net.cf"] = 638 264 | domainext["net.cg"] = 639; domainext["net.ch"] = 640; domainext["net.ci"] = 641 265 | domainext["net.ck"] = 642; domainext["net.cl"] = 643; domainext["net.cm"] = 644 266 | domainext["net.cn"] = 645; domainext["net.co"] = 646; domainext["net.com"] = 647 267 | domainext["net.coop"] = 648; domainext["net.cr"] = 649; domainext["net.cu"] = 650 268 | domainext["net.cv"] = 651; domainext["net.cw"] = 652; domainext["net.cx"] = 653 269 | domainext["net.cy"] = 654; domainext["net.cz"] = 655; domainext["net.de"] = 656 270 | domainext["net.dj"] = 657; domainext["net.dk"] = 658; domainext["net.dm"] = 659 271 | domainext["net.do"] = 660; domainext["net.dz"] = 661; domainext["net.ec"] = 662 272 | domainext["net.edu"] = 663; domainext["net.ee"] = 664; domainext["net.eg"] = 665 273 | domainext["net.eh"] = 666; domainext["net.er"] = 667; domainext["net.es"] = 668 274 | domainext["net.et"] = 669; domainext["net.eu"] = 670; domainext["net.fi"] = 671 275 | domainext["net.fj"] = 672; domainext["net.fk"] = 673; domainext["net.fm"] = 674 276 | domainext["net.fo"] = 675; domainext["net.fr"] = 676; domainext["net.ga"] = 677 277 | domainext["net.gb"] = 678; domainext["net.gd"] = 679; domainext["net.ge"] = 680 278 | domainext["net.gf"] = 681; domainext["net.gg"] = 682; domainext["net.gh"] = 683 279 | domainext["net.gi"] = 684; domainext["net.gl"] = 685; domainext["net.gm"] = 686 280 | domainext["net.gn"] = 687; domainext["net.gov"] = 688; domainext["net.gp"] = 689 281 | domainext["net.gq"] = 690; domainext["net.gr"] = 691; domainext["net.gs"] = 692 282 | domainext["net.gt"] = 693; domainext["net.gu"] = 694; domainext["net.gw"] = 695 283 | domainext["net.gy"] = 696; domainext["net.hk"] = 697; domainext["net.hm"] = 698 284 | domainext["net.hn"] = 699; domainext["net.hr"] = 700; domainext["net.ht"] = 701 285 | domainext["net.hu"] = 702; domainext["net.id"] = 703; domainext["net.ie"] = 704 286 | domainext["net.il"] = 705; domainext["net.im"] = 706; domainext["net.in"] = 707 287 | domainext["net.info"] = 708; domainext["net.int"] = 709; domainext["net.io"] = 710 288 | domainext["net.iq"] = 711; domainext["net.ir"] = 712; domainext["net.is"] = 713 289 | domainext["net.it"] = 714; domainext["net.je"] = 715; domainext["net.jm"] = 716 290 | domainext["net.jo"] = 717; domainext["net.jobs"] = 718; domainext["net.jp"] = 719 291 | domainext["net.ke"] = 720; domainext["net.kg"] = 721; domainext["net.kh"] = 722 292 | domainext["net.ki"] = 723; domainext["net.km"] = 724; domainext["net.kn"] = 725 293 | domainext["net.kp"] = 726; domainext["net.kr"] = 727; domainext["net.kw"] = 728 294 | domainext["net.ky"] = 729; domainext["net.kz"] = 730; domainext["net.la"] = 731 295 | domainext["net.lb"] = 732; domainext["net.lc"] = 733; domainext["net.li"] = 734 296 | domainext["net.lk"] = 735; domainext["net.lr"] = 736; domainext["net.ls"] = 737 297 | domainext["net.lt"] = 738; domainext["net.lu"] = 739; domainext["net.lv"] = 740 298 | domainext["net.ly"] = 741; domainext["net.ma"] = 742; domainext["net.mc"] = 743 299 | domainext["net.md"] = 744; domainext["net.me"] = 745; domainext["net.mf"] = 746 300 | domainext["net.mg"] = 747; domainext["net.mh"] = 748; domainext["net.mil"] = 749 301 | domainext["net.mk"] = 750; domainext["net.ml"] = 751; domainext["net.mm"] = 752 302 | domainext["net.mn"] = 753; domainext["net.mo"] = 754; domainext["net.mobi"] = 755 303 | domainext["net.mp"] = 756; domainext["net.mq"] = 757; domainext["net.mr"] = 758 304 | domainext["net.ms"] = 759; domainext["net.mt"] = 760; domainext["net.mu"] = 761 305 | domainext["net.museum"] = 762; domainext["net.mv"] = 763; domainext["net.mw"] = 764 306 | domainext["net.mx"] = 765; domainext["net.my"] = 766; domainext["net.mz"] = 767 307 | domainext["net.na"] = 768; domainext["net.name"] = 769; domainext["net.nc"] = 770 308 | domainext["net.ne"] = 771; domainext["net.net"] = 772; domainext["net.nf"] = 773 309 | domainext["net.ng"] = 774; domainext["net.ni"] = 775; domainext["net.nl"] = 776 310 | domainext["net.no"] = 777; domainext["net.np"] = 778; domainext["net.nr"] = 779 311 | domainext["net.nu"] = 780; domainext["net.nz"] = 781; domainext["net.om"] = 782 312 | domainext["net.org"] = 783; domainext["net.pa"] = 784; domainext["net.pe"] = 785 313 | domainext["net.pf"] = 786; domainext["net.pg"] = 787; domainext["net.ph"] = 788 314 | domainext["net.pk"] = 789; domainext["net.pl"] = 790; domainext["net.pm"] = 791 315 | domainext["net.pn"] = 792; domainext["net.pr"] = 793; domainext["net.pro"] = 794 316 | domainext["net.ps"] = 795; domainext["net.pt"] = 796; domainext["net.pw"] = 797 317 | domainext["net.py"] = 798; domainext["net.qa"] = 799; domainext["net.re"] = 800 318 | domainext["net.ro"] = 801; domainext["net.rs"] = 802; domainext["net.ru"] = 803 319 | domainext["net.rw"] = 804; domainext["net.sa"] = 805; domainext["net.sb"] = 806 320 | domainext["net.sc"] = 807; domainext["net.sd"] = 808; domainext["net.se"] = 809 321 | domainext["net.sg"] = 810; domainext["net.sh"] = 811; domainext["net.si"] = 812 322 | domainext["net.sj"] = 813; domainext["net.sk"] = 814; domainext["net.sl"] = 815 323 | domainext["net.sm"] = 816; domainext["net.sn"] = 817; domainext["net.so"] = 818 324 | domainext["net.sr"] = 819; domainext["net.st"] = 820; domainext["net.su"] = 821 325 | domainext["net.sv"] = 822; domainext["net.sx"] = 823; domainext["net.sy"] = 824 326 | domainext["net.sz"] = 825; domainext["net.tc"] = 826; domainext["net.td"] = 827 327 | domainext["net.tel"] = 828; domainext["net.tf"] = 829; domainext["net.tg"] = 830 328 | domainext["net.th"] = 831; domainext["net.tj"] = 832; domainext["net.tk"] = 833 329 | domainext["net.tl"] = 834; domainext["net.tm"] = 835; domainext["net.tn"] = 836 330 | domainext["net.to"] = 837; domainext["net.tp"] = 838; domainext["net.tr"] = 839 331 | domainext["net.travel"] = 840; domainext["net.tt"] = 841; domainext["net.tv"] = 842 332 | domainext["net.tw"] = 843; domainext["net.tz"] = 844; domainext["net.ua"] = 845 333 | domainext["net.ug"] = 846; domainext["net.uk"] = 847; domainext["net.um"] = 848 334 | domainext["net.us"] = 849; domainext["net.uy"] = 850; domainext["net.uz"] = 851 335 | domainext["net.va"] = 852; domainext["net.vc"] = 853; domainext["net.ve"] = 854 336 | domainext["net.vg"] = 855; domainext["net.vi"] = 856; domainext["net.vn"] = 857 337 | domainext["net.vu"] = 858; domainext["net.wf"] = 859; domainext["net.ws"] = 860 338 | domainext["net.ye"] = 861; domainext["net.yt"] = 862; domainext["net.za"] = 863 339 | domainext["net.zm"] = 864; domainext["net.zw"] = 865; domainext["edu.in-addr.arpa"] = 866 340 | domainext["edu.ac"] = 867; domainext["edu.ad"] = 868; domainext["edu.ae"] = 869 341 | domainext["edu.af"] = 870; domainext["edu.ag"] = 871; domainext["edu.ai"] = 872 342 | domainext["edu.al"] = 873; domainext["edu.am"] = 874; domainext["edu.an"] = 875 343 | domainext["edu.ao"] = 876; domainext["edu.aq"] = 877; domainext["edu.ar"] = 878 344 | domainext["edu.arpa"] = 879; domainext["edu.as"] = 880; domainext["edu.asia"] = 881 345 | domainext["edu.at"] = 882; domainext["edu.au"] = 883; domainext["edu.aw"] = 884 346 | domainext["edu.ax"] = 885; domainext["edu.az"] = 886; domainext["edu.ba"] = 887 347 | domainext["edu.bb"] = 888; domainext["edu.bd"] = 889; domainext["edu.be"] = 890 348 | domainext["edu.bf"] = 891; domainext["edu.bg"] = 892; domainext["edu.bh"] = 893 349 | domainext["edu.bi"] = 894; domainext["edu.biz"] = 895; domainext["edu.bj"] = 896 350 | domainext["edu.bl"] = 897; domainext["edu.bm"] = 898; domainext["edu.bn"] = 899 351 | domainext["edu.bo"] = 900; domainext["edu.bq"] = 901; domainext["edu.br"] = 902 352 | domainext["edu.bs"] = 903; domainext["edu.bt"] = 904; domainext["edu.bv"] = 905 353 | domainext["edu.bw"] = 906; domainext["edu.by"] = 907; domainext["edu.bz"] = 908 354 | domainext["edu.ca"] = 909; domainext["edu.cat"] = 910; domainext["edu.cc"] = 911 355 | domainext["edu.cd"] = 912; domainext["edu.cf"] = 913; domainext["edu.cg"] = 914 356 | domainext["edu.ch"] = 915; domainext["edu.ci"] = 916; domainext["edu.ck"] = 917 357 | domainext["edu.cl"] = 918; domainext["edu.cm"] = 919; domainext["edu.cn"] = 920 358 | domainext["edu.co"] = 921; domainext["edu.com"] = 922; domainext["edu.coop"] = 923 359 | domainext["edu.cr"] = 924; domainext["edu.cu"] = 925; domainext["edu.cv"] = 926 360 | domainext["edu.cw"] = 927; domainext["edu.cx"] = 928; domainext["edu.cy"] = 929 361 | domainext["edu.cz"] = 930; domainext["edu.de"] = 931; domainext["edu.dj"] = 932 362 | domainext["edu.dk"] = 933; domainext["edu.dm"] = 934; domainext["edu.do"] = 935 363 | domainext["edu.dz"] = 936; domainext["edu.ec"] = 937; domainext["edu.edu"] = 938 364 | domainext["edu.ee"] = 939; domainext["edu.eg"] = 940; domainext["edu.eh"] = 941 365 | domainext["edu.er"] = 942; domainext["edu.es"] = 943; domainext["edu.et"] = 944 366 | domainext["edu.eu"] = 945; domainext["edu.fi"] = 946; domainext["edu.fj"] = 947 367 | domainext["edu.fk"] = 948; domainext["edu.fm"] = 949; domainext["edu.fo"] = 950 368 | domainext["edu.fr"] = 951; domainext["edu.ga"] = 952; domainext["edu.gb"] = 953 369 | domainext["edu.gd"] = 954; domainext["edu.ge"] = 955; domainext["edu.gf"] = 956 370 | domainext["edu.gg"] = 957; domainext["edu.gh"] = 958; domainext["edu.gi"] = 959 371 | domainext["edu.gl"] = 960; domainext["edu.gm"] = 961; domainext["edu.gn"] = 962 372 | domainext["edu.gov"] = 963; domainext["edu.gp"] = 964; domainext["edu.gq"] = 965 373 | domainext["edu.gr"] = 966; domainext["edu.gs"] = 967; domainext["edu.gt"] = 968 374 | domainext["edu.gu"] = 969; domainext["edu.gw"] = 970; domainext["edu.gy"] = 971 375 | domainext["edu.hk"] = 972; domainext["edu.hm"] = 973; domainext["edu.hn"] = 974 376 | domainext["edu.hr"] = 975; domainext["edu.ht"] = 976; domainext["edu.hu"] = 977 377 | domainext["edu.id"] = 978; domainext["edu.ie"] = 979; domainext["edu.il"] = 980 378 | domainext["edu.im"] = 981; domainext["edu.in"] = 982; domainext["edu.info"] = 983 379 | domainext["edu.int"] = 984; domainext["edu.io"] = 985; domainext["edu.iq"] = 986 380 | domainext["edu.ir"] = 987; domainext["edu.is"] = 988; domainext["edu.it"] = 989 381 | domainext["edu.je"] = 990; domainext["edu.jm"] = 991; domainext["edu.jo"] = 992 382 | domainext["edu.jobs"] = 993; domainext["edu.jp"] = 994; domainext["edu.ke"] = 995 383 | domainext["edu.kg"] = 996; domainext["edu.kh"] = 997; domainext["edu.ki"] = 998 384 | domainext["edu.km"] = 999; domainext["edu.kn"] = 1000; domainext["edu.kp"] = 1001 385 | domainext["edu.kr"] = 1002; domainext["edu.kw"] = 1003; domainext["edu.ky"] = 1004 386 | domainext["edu.kz"] = 1005; domainext["edu.la"] = 1006; domainext["edu.lb"] = 1007 387 | domainext["edu.lc"] = 1008; domainext["edu.li"] = 1009; domainext["edu.lk"] = 1010 388 | domainext["edu.lr"] = 1011; domainext["edu.ls"] = 1012; domainext["edu.lt"] = 1013 389 | domainext["edu.lu"] = 1014; domainext["edu.lv"] = 1015; domainext["edu.ly"] = 1016 390 | domainext["edu.ma"] = 1017; domainext["edu.mc"] = 1018; domainext["edu.md"] = 1019 391 | domainext["edu.me"] = 1020; domainext["edu.mf"] = 1021; domainext["edu.mg"] = 1022 392 | domainext["edu.mh"] = 1023; domainext["edu.mil"] = 1024; domainext["edu.mk"] = 1025 393 | domainext["edu.ml"] = 1026; domainext["edu.mm"] = 1027; domainext["edu.mn"] = 1028 394 | domainext["edu.mo"] = 1029; domainext["edu.mobi"] = 1030; domainext["edu.mp"] = 1031 395 | domainext["edu.mq"] = 1032; domainext["edu.mr"] = 1033; domainext["edu.ms"] = 1034 396 | domainext["edu.mt"] = 1035; domainext["edu.mu"] = 1036; domainext["edu.museum"] = 1037 397 | domainext["edu.mv"] = 1038; domainext["edu.mw"] = 1039; domainext["edu.mx"] = 1040 398 | domainext["edu.my"] = 1041; domainext["edu.mz"] = 1042; domainext["edu.na"] = 1043 399 | domainext["edu.name"] = 1044; domainext["edu.nc"] = 1045; domainext["edu.ne"] = 1046 400 | domainext["edu.net"] = 1047; domainext["edu.nf"] = 1048; domainext["edu.ng"] = 1049 401 | domainext["edu.ni"] = 1050; domainext["edu.nl"] = 1051; domainext["edu.no"] = 1052 402 | domainext["edu.np"] = 1053; domainext["edu.nr"] = 1054; domainext["edu.nu"] = 1055 403 | domainext["edu.nz"] = 1056; domainext["edu.om"] = 1057; domainext["edu.org"] = 1058 404 | domainext["edu.pa"] = 1059; domainext["edu.pe"] = 1060; domainext["edu.pf"] = 1061 405 | domainext["edu.pg"] = 1062; domainext["edu.ph"] = 1063; domainext["edu.pk"] = 1064 406 | domainext["edu.pl"] = 1065; domainext["edu.pm"] = 1066; domainext["edu.pn"] = 1067 407 | domainext["edu.pr"] = 1068; domainext["edu.pro"] = 1069; domainext["edu.ps"] = 1070 408 | domainext["edu.pt"] = 1071; domainext["edu.pw"] = 1072; domainext["edu.py"] = 1073 409 | domainext["edu.qa"] = 1074; domainext["edu.re"] = 1075; domainext["edu.ro"] = 1076 410 | domainext["edu.rs"] = 1077; domainext["edu.ru"] = 1078; domainext["edu.rw"] = 1079 411 | domainext["edu.sa"] = 1080; domainext["edu.sb"] = 1081; domainext["edu.sc"] = 1082 412 | domainext["edu.sd"] = 1083; domainext["edu.se"] = 1084; domainext["edu.sg"] = 1085 413 | domainext["edu.sh"] = 1086; domainext["edu.si"] = 1087; domainext["edu.sj"] = 1088 414 | domainext["edu.sk"] = 1089; domainext["edu.sl"] = 1090; domainext["edu.sm"] = 1091 415 | domainext["edu.sn"] = 1092; domainext["edu.so"] = 1093; domainext["edu.sr"] = 1094 416 | domainext["edu.st"] = 1095; domainext["edu.su"] = 1096; domainext["edu.sv"] = 1097 417 | domainext["edu.sx"] = 1098; domainext["edu.sy"] = 1099; domainext["edu.sz"] = 1100 418 | domainext["edu.tc"] = 1101; domainext["edu.td"] = 1102; domainext["edu.tel"] = 1103 419 | domainext["edu.tf"] = 1104; domainext["edu.tg"] = 1105; domainext["edu.th"] = 1106 420 | domainext["edu.tj"] = 1107; domainext["edu.tk"] = 1108; domainext["edu.tl"] = 1109 421 | domainext["edu.tm"] = 1110; domainext["edu.tn"] = 1111; domainext["edu.to"] = 1112 422 | domainext["edu.tp"] = 1113; domainext["edu.tr"] = 1114; domainext["edu.travel"] = 1115 423 | domainext["edu.tt"] = 1116; domainext["edu.tv"] = 1117; domainext["edu.tw"] = 1118 424 | domainext["edu.tz"] = 1119; domainext["edu.ua"] = 1120; domainext["edu.ug"] = 1121 425 | domainext["edu.uk"] = 1122; domainext["edu.um"] = 1123; domainext["edu.us"] = 1124 426 | domainext["edu.uy"] = 1125; domainext["edu.uz"] = 1126; domainext["edu.va"] = 1127 427 | domainext["edu.vc"] = 1128; domainext["edu.ve"] = 1129; domainext["edu.vg"] = 1130 428 | domainext["edu.vi"] = 1131; domainext["edu.vn"] = 1132; domainext["edu.vu"] = 1133 429 | domainext["edu.wf"] = 1134; domainext["edu.ws"] = 1135; domainext["edu.ye"] = 1136 430 | domainext["edu.yt"] = 1137; domainext["edu.za"] = 1138; domainext["edu.zm"] = 1139 431 | domainext["edu.zw"] = 1140; domainext["gov.in-addr.arpa"] = 1141; domainext["gov.ac"] = 1142 432 | domainext["gov.ad"] = 1143; domainext["gov.ae"] = 1144; domainext["gov.af"] = 1145 433 | domainext["gov.ag"] = 1146; domainext["gov.ai"] = 1147; domainext["gov.al"] = 1148 434 | domainext["gov.am"] = 1149; domainext["gov.an"] = 1150; domainext["gov.ao"] = 1151 435 | domainext["gov.aq"] = 1152; domainext["gov.ar"] = 1153; domainext["gov.arpa"] = 1154 436 | domainext["gov.as"] = 1155; domainext["gov.asia"] = 1156; domainext["gov.at"] = 1157 437 | domainext["gov.au"] = 1158; domainext["gov.aw"] = 1159; domainext["gov.ax"] = 1160 438 | domainext["gov.az"] = 1161; domainext["gov.ba"] = 1162; domainext["gov.bb"] = 1163 439 | domainext["gov.bd"] = 1164; domainext["gov.be"] = 1165; domainext["gov.bf"] = 1166 440 | domainext["gov.bg"] = 1167; domainext["gov.bh"] = 1168; domainext["gov.bi"] = 1169 441 | domainext["gov.biz"] = 1170; domainext["gov.bj"] = 1171; domainext["gov.bl"] = 1172 442 | domainext["gov.bm"] = 1173; domainext["gov.bn"] = 1174; domainext["gov.bo"] = 1175 443 | domainext["gov.bq"] = 1176; domainext["gov.br"] = 1177; domainext["gov.bs"] = 1178 444 | domainext["gov.bt"] = 1179; domainext["gov.bv"] = 1180; domainext["gov.bw"] = 1181 445 | domainext["gov.by"] = 1182; domainext["gov.bz"] = 1183; domainext["gov.ca"] = 1184 446 | domainext["gov.cat"] = 1185; domainext["gov.cc"] = 1186; domainext["gov.cd"] = 1187 447 | domainext["gov.cf"] = 1188; domainext["gov.cg"] = 1189; domainext["gov.ch"] = 1190 448 | domainext["gov.ci"] = 1191; domainext["gov.ck"] = 1192; domainext["gov.cl"] = 1193 449 | domainext["gov.cm"] = 1194; domainext["gov.cn"] = 1195; domainext["gov.co"] = 1196 450 | domainext["gov.com"] = 1197; domainext["gov.coop"] = 1198; domainext["gov.cr"] = 1199 451 | domainext["gov.cu"] = 1200; domainext["gov.cv"] = 1201; domainext["gov.cw"] = 1202 452 | domainext["gov.cx"] = 1203; domainext["gov.cy"] = 1204; domainext["gov.cz"] = 1205 453 | domainext["gov.de"] = 1206; domainext["gov.dj"] = 1207; domainext["gov.dk"] = 1208 454 | domainext["gov.dm"] = 1209; domainext["gov.do"] = 1210; domainext["gov.dz"] = 1211 455 | domainext["gov.ec"] = 1212; domainext["gov.edu"] = 1213; domainext["gov.ee"] = 1214 456 | domainext["gov.eg"] = 1215; domainext["gov.eh"] = 1216; domainext["gov.er"] = 1217 457 | domainext["gov.es"] = 1218; domainext["gov.et"] = 1219; domainext["gov.eu"] = 1220 458 | domainext["gov.fi"] = 1221; domainext["gov.fj"] = 1222; domainext["gov.fk"] = 1223 459 | domainext["gov.fm"] = 1224; domainext["gov.fo"] = 1225; domainext["gov.fr"] = 1226 460 | domainext["gov.ga"] = 1227; domainext["gov.gb"] = 1228; domainext["gov.gd"] = 1229 461 | domainext["gov.ge"] = 1230; domainext["gov.gf"] = 1231; domainext["gov.gg"] = 1232 462 | domainext["gov.gh"] = 1233; domainext["gov.gi"] = 1234; domainext["gov.gl"] = 1235 463 | domainext["gov.gm"] = 1236; domainext["gov.gn"] = 1237; domainext["gov.gov"] = 1238 464 | domainext["gov.gp"] = 1239; domainext["gov.gq"] = 1240; domainext["gov.gr"] = 1241 465 | domainext["gov.gs"] = 1242; domainext["gov.gt"] = 1243; domainext["gov.gu"] = 1244 466 | domainext["gov.gw"] = 1245; domainext["gov.gy"] = 1246; domainext["gov.hk"] = 1247 467 | domainext["gov.hm"] = 1248; domainext["gov.hn"] = 1249; domainext["gov.hr"] = 1250 468 | domainext["gov.ht"] = 1251; domainext["gov.hu"] = 1252; domainext["gov.id"] = 1253 469 | domainext["gov.ie"] = 1254; domainext["gov.il"] = 1255; domainext["gov.im"] = 1256 470 | domainext["gov.in"] = 1257; domainext["gov.info"] = 1258; domainext["gov.int"] = 1259 471 | domainext["gov.io"] = 1260; domainext["gov.iq"] = 1261; domainext["gov.ir"] = 1262 472 | domainext["gov.is"] = 1263; domainext["gov.it"] = 1264; domainext["gov.je"] = 1265 473 | domainext["gov.jm"] = 1266; domainext["gov.jo"] = 1267; domainext["gov.jobs"] = 1268 474 | domainext["gov.jp"] = 1269; domainext["gov.ke"] = 1270; domainext["gov.kg"] = 1271 475 | domainext["gov.kh"] = 1272; domainext["gov.ki"] = 1273; domainext["gov.km"] = 1274 476 | domainext["gov.kn"] = 1275; domainext["gov.kp"] = 1276; domainext["gov.kr"] = 1277 477 | domainext["gov.kw"] = 1278; domainext["gov.ky"] = 1279; domainext["gov.kz"] = 1280 478 | domainext["gov.la"] = 1281; domainext["gov.lb"] = 1282; domainext["gov.lc"] = 1283 479 | domainext["gov.li"] = 1284; domainext["gov.lk"] = 1285; domainext["gov.lr"] = 1286 480 | domainext["gov.ls"] = 1287; domainext["gov.lt"] = 1288; domainext["gov.lu"] = 1289 481 | domainext["gov.lv"] = 1290; domainext["gov.ly"] = 1291; domainext["gov.ma"] = 1292 482 | domainext["gov.mc"] = 1293; domainext["gov.md"] = 1294; domainext["gov.me"] = 1295 483 | domainext["gov.mf"] = 1296; domainext["gov.mg"] = 1297; domainext["gov.mh"] = 1298 484 | domainext["gov.mil"] = 1299; domainext["gov.mk"] = 1300; domainext["gov.ml"] = 1301 485 | domainext["gov.mm"] = 1302; domainext["gov.mn"] = 1303; domainext["gov.mo"] = 1304 486 | domainext["gov.mobi"] = 1305; domainext["gov.mp"] = 1306; domainext["gov.mq"] = 1307 487 | domainext["gov.mr"] = 1308; domainext["gov.ms"] = 1309; domainext["gov.mt"] = 1310 488 | domainext["gov.mu"] = 1311; domainext["gov.museum"] = 1312; domainext["gov.mv"] = 1313 489 | domainext["gov.mw"] = 1314; domainext["gov.mx"] = 1315; domainext["gov.my"] = 1316 490 | domainext["gov.mz"] = 1317; domainext["gov.na"] = 1318; domainext["gov.name"] = 1319 491 | domainext["gov.nc"] = 1320; domainext["gov.ne"] = 1321; domainext["gov.net"] = 1322 492 | domainext["gov.nf"] = 1323; domainext["gov.ng"] = 1324; domainext["gov.ni"] = 1325 493 | domainext["gov.nl"] = 1326; domainext["gov.no"] = 1327; domainext["gov.np"] = 1328 494 | domainext["gov.nr"] = 1329; domainext["gov.nu"] = 1330; domainext["gov.nz"] = 1331 495 | domainext["gov.om"] = 1332; domainext["gov.org"] = 1333; domainext["gov.pa"] = 1334 496 | domainext["gov.pe"] = 1335; domainext["gov.pf"] = 1336; domainext["gov.pg"] = 1337 497 | domainext["gov.ph"] = 1338; domainext["gov.pk"] = 1339; domainext["gov.pl"] = 1340 498 | domainext["gov.pm"] = 1341; domainext["gov.pn"] = 1342; domainext["gov.pr"] = 1343 499 | domainext["gov.pro"] = 1344; domainext["gov.ps"] = 1345; domainext["gov.pt"] = 1346 500 | domainext["gov.pw"] = 1347; domainext["gov.py"] = 1348; domainext["gov.qa"] = 1349 501 | domainext["gov.re"] = 1350; domainext["gov.ro"] = 1351; domainext["gov.rs"] = 1352 502 | domainext["gov.ru"] = 1353; domainext["gov.rw"] = 1354; domainext["gov.sa"] = 1355 503 | domainext["gov.sb"] = 1356; domainext["gov.sc"] = 1357; domainext["gov.sd"] = 1358 504 | domainext["gov.se"] = 1359; domainext["gov.sg"] = 1360; domainext["gov.sh"] = 1361 505 | domainext["gov.si"] = 1362; domainext["gov.sj"] = 1363; domainext["gov.sk"] = 1364 506 | domainext["gov.sl"] = 1365; domainext["gov.sm"] = 1366; domainext["gov.sn"] = 1367 507 | domainext["gov.so"] = 1368; domainext["gov.sr"] = 1369; domainext["gov.st"] = 1370 508 | domainext["gov.su"] = 1371; domainext["gov.sv"] = 1372; domainext["gov.sx"] = 1373 509 | domainext["gov.sy"] = 1374; domainext["gov.sz"] = 1375; domainext["gov.tc"] = 1376 510 | domainext["gov.td"] = 1377; domainext["gov.tel"] = 1378; domainext["gov.tf"] = 1379 511 | domainext["gov.tg"] = 1380; domainext["gov.th"] = 1381; domainext["gov.tj"] = 1382 512 | domainext["gov.tk"] = 1383; domainext["gov.tl"] = 1384; domainext["gov.tm"] = 1385 513 | domainext["gov.tn"] = 1386; domainext["gov.to"] = 1387; domainext["gov.tp"] = 1388 514 | domainext["gov.tr"] = 1389; domainext["gov.travel"] = 1390; domainext["gov.tt"] = 1391 515 | domainext["gov.tv"] = 1392; domainext["gov.tw"] = 1393; domainext["gov.tz"] = 1394 516 | domainext["gov.ua"] = 1395; domainext["gov.ug"] = 1396; domainext["gov.uk"] = 1397 517 | domainext["gov.um"] = 1398; domainext["gov.us"] = 1399; domainext["gov.uy"] = 1400 518 | domainext["gov.uz"] = 1401; domainext["gov.va"] = 1402; domainext["gov.vc"] = 1403 519 | domainext["gov.ve"] = 1404; domainext["gov.vg"] = 1405; domainext["gov.vi"] = 1406 520 | domainext["gov.vn"] = 1407; domainext["gov.vu"] = 1408; domainext["gov.wf"] = 1409 521 | domainext["gov.ws"] = 1410; domainext["gov.ye"] = 1411; domainext["gov.yt"] = 1412 522 | domainext["gov.za"] = 1413; domainext["gov.zm"] = 1414; domainext["gov.zw"] = 1415 523 | domainext["org.in-addr.arpa"] = 1416; domainext["org.ac"] = 1417; domainext["org.ad"] = 1418 524 | domainext["org.ae"] = 1419; domainext["org.af"] = 1420; domainext["org.ag"] = 1421 525 | domainext["org.ai"] = 1422; domainext["org.al"] = 1423; domainext["org.am"] = 1424 526 | domainext["org.an"] = 1425; domainext["org.ao"] = 1426; domainext["org.aq"] = 1427 527 | domainext["org.ar"] = 1428; domainext["org.arpa"] = 1429; domainext["org.as"] = 1430 528 | domainext["org.asia"] = 1431; domainext["org.at"] = 1432; domainext["org.au"] = 1433 529 | domainext["org.aw"] = 1434; domainext["org.ax"] = 1435; domainext["org.az"] = 1436 530 | domainext["org.ba"] = 1437; domainext["org.bb"] = 1438; domainext["org.bd"] = 1439 531 | domainext["org.be"] = 1440; domainext["org.bf"] = 1441; domainext["org.bg"] = 1442 532 | domainext["org.bh"] = 1443; domainext["org.bi"] = 1444; domainext["org.biz"] = 1445 533 | domainext["org.bj"] = 1446; domainext["org.bl"] = 1447; domainext["org.bm"] = 1448 534 | domainext["org.bn"] = 1449; domainext["org.bo"] = 1450; domainext["org.bq"] = 1451 535 | domainext["org.br"] = 1452; domainext["org.bs"] = 1453; domainext["org.bt"] = 1454 536 | domainext["org.bv"] = 1455; domainext["org.bw"] = 1456; domainext["org.by"] = 1457 537 | domainext["org.bz"] = 1458; domainext["org.ca"] = 1459; domainext["org.cat"] = 1460 538 | domainext["org.cc"] = 1461; domainext["org.cd"] = 1462; domainext["org.cf"] = 1463 539 | domainext["org.cg"] = 1464; domainext["org.ch"] = 1465; domainext["org.ci"] = 1466 540 | domainext["org.ck"] = 1467; domainext["org.cl"] = 1468; domainext["org.cm"] = 1469 541 | domainext["org.cn"] = 1470; domainext["org.co"] = 1471; domainext["org.com"] = 1472 542 | domainext["org.coop"] = 1473; domainext["org.cr"] = 1474; domainext["org.cu"] = 1475 543 | domainext["org.cv"] = 1476; domainext["org.cw"] = 1477; domainext["org.cx"] = 1478 544 | domainext["org.cy"] = 1479; domainext["org.cz"] = 1480; domainext["org.de"] = 1481 545 | domainext["org.dj"] = 1482; domainext["org.dk"] = 1483; domainext["org.dm"] = 1484 546 | domainext["org.do"] = 1485; domainext["org.dz"] = 1486; domainext["org.ec"] = 1487 547 | domainext["org.edu"] = 1488; domainext["org.ee"] = 1489; domainext["org.eg"] = 1490 548 | domainext["org.eh"] = 1491; domainext["org.er"] = 1492; domainext["org.es"] = 1493 549 | domainext["org.et"] = 1494; domainext["org.eu"] = 1495; domainext["org.fi"] = 1496 550 | domainext["org.fj"] = 1497; domainext["org.fk"] = 1498; domainext["org.fm"] = 1499 551 | domainext["org.fo"] = 1500; domainext["org.fr"] = 1501; domainext["org.ga"] = 1502 552 | domainext["org.gb"] = 1503; domainext["org.gd"] = 1504; domainext["org.ge"] = 1505 553 | domainext["org.gf"] = 1506; domainext["org.gg"] = 1507; domainext["org.gh"] = 1508 554 | domainext["org.gi"] = 1509; domainext["org.gl"] = 1510; domainext["org.gm"] = 1511 555 | domainext["org.gn"] = 1512; domainext["org.gov"] = 1513; domainext["org.gp"] = 1514 556 | domainext["org.gq"] = 1515; domainext["org.gr"] = 1516; domainext["org.gs"] = 1517 557 | domainext["org.gt"] = 1518; domainext["org.gu"] = 1519; domainext["org.gw"] = 1520 558 | domainext["org.gy"] = 1521; domainext["org.hk"] = 1522; domainext["org.hm"] = 1523 559 | domainext["org.hn"] = 1524; domainext["org.hr"] = 1525; domainext["org.ht"] = 1526 560 | domainext["org.hu"] = 1527; domainext["org.id"] = 1528; domainext["org.ie"] = 1529 561 | domainext["org.il"] = 1530; domainext["org.im"] = 1531; domainext["org.in"] = 1532 562 | domainext["org.info"] = 1533; domainext["org.int"] = 1534; domainext["org.io"] = 1535 563 | domainext["org.iq"] = 1536; domainext["org.ir"] = 1537; domainext["org.is"] = 1538 564 | domainext["org.it"] = 1539; domainext["org.je"] = 1540; domainext["org.jm"] = 1541 565 | domainext["org.jo"] = 1542; domainext["org.jobs"] = 1543; domainext["org.jp"] = 1544 566 | domainext["org.ke"] = 1545; domainext["org.kg"] = 1546; domainext["org.kh"] = 1547 567 | domainext["org.ki"] = 1548; domainext["org.km"] = 1549; domainext["org.kn"] = 1550 568 | domainext["org.kp"] = 1551; domainext["org.kr"] = 1552; domainext["org.kw"] = 1553 569 | domainext["org.ky"] = 1554; domainext["org.kz"] = 1555; domainext["org.la"] = 1556 570 | domainext["org.lb"] = 1557; domainext["org.lc"] = 1558; domainext["org.li"] = 1559 571 | domainext["org.lk"] = 1560; domainext["org.lr"] = 1561; domainext["org.ls"] = 1562 572 | domainext["org.lt"] = 1563; domainext["org.lu"] = 1564; domainext["org.lv"] = 1565 573 | domainext["org.ly"] = 1566; domainext["org.ma"] = 1567; domainext["org.mc"] = 1568 574 | domainext["org.md"] = 1569; domainext["org.me"] = 1570; domainext["org.mf"] = 1571 575 | domainext["org.mg"] = 1572; domainext["org.mh"] = 1573; domainext["org.mil"] = 1574 576 | domainext["org.mk"] = 1575; domainext["org.ml"] = 1576; domainext["org.mm"] = 1577 577 | domainext["org.mn"] = 1578; domainext["org.mo"] = 1579; domainext["org.mobi"] = 1580 578 | domainext["org.mp"] = 1581; domainext["org.mq"] = 1582; domainext["org.mr"] = 1583 579 | domainext["org.ms"] = 1584; domainext["org.mt"] = 1585; domainext["org.mu"] = 1586 580 | domainext["org.museum"] = 1587; domainext["org.mv"] = 1588; domainext["org.mw"] = 1589 581 | domainext["org.mx"] = 1590; domainext["org.my"] = 1591; domainext["org.mz"] = 1592 582 | domainext["org.na"] = 1593; domainext["org.name"] = 1594; domainext["org.nc"] = 1595 583 | domainext["org.ne"] = 1596; domainext["org.net"] = 1597; domainext["org.nf"] = 1598 584 | domainext["org.ng"] = 1599; domainext["org.ni"] = 1600; domainext["org.nl"] = 1601 585 | domainext["org.no"] = 1602; domainext["org.np"] = 1603; domainext["org.nr"] = 1604 586 | domainext["org.nu"] = 1605; domainext["org.nz"] = 1606; domainext["org.om"] = 1607 587 | domainext["org.org"] = 1608; domainext["org.pa"] = 1609; domainext["org.pe"] = 1610 588 | domainext["org.pf"] = 1611; domainext["org.pg"] = 1612; domainext["org.ph"] = 1613 589 | domainext["org.pk"] = 1614; domainext["org.pl"] = 1615; domainext["org.pm"] = 1616 590 | domainext["org.pn"] = 1617; domainext["org.pr"] = 1618; domainext["org.pro"] = 1619 591 | domainext["org.ps"] = 1620; domainext["org.pt"] = 1621; domainext["org.pw"] = 1622 592 | domainext["org.py"] = 1623; domainext["org.qa"] = 1624; domainext["org.re"] = 1625 593 | domainext["org.ro"] = 1626; domainext["org.rs"] = 1627; domainext["org.ru"] = 1628 594 | domainext["org.rw"] = 1629; domainext["org.sa"] = 1630; domainext["org.sb"] = 1631 595 | domainext["org.sc"] = 1632; domainext["org.sd"] = 1633; domainext["org.se"] = 1634 596 | domainext["org.sg"] = 1635; domainext["org.sh"] = 1636; domainext["org.si"] = 1637 597 | domainext["org.sj"] = 1638; domainext["org.sk"] = 1639; domainext["org.sl"] = 1640 598 | domainext["org.sm"] = 1641; domainext["org.sn"] = 1642; domainext["org.so"] = 1643 599 | domainext["org.sr"] = 1644; domainext["org.st"] = 1645; domainext["org.su"] = 1646 600 | domainext["org.sv"] = 1647; domainext["org.sx"] = 1648; domainext["org.sy"] = 1649 601 | domainext["org.sz"] = 1650; domainext["org.tc"] = 1651; domainext["org.td"] = 1652 602 | domainext["org.tel"] = 1653; domainext["org.tf"] = 1654; domainext["org.tg"] = 1655 603 | domainext["org.th"] = 1656; domainext["org.tj"] = 1657; domainext["org.tk"] = 1658 604 | domainext["org.tl"] = 1659; domainext["org.tm"] = 1660; domainext["org.tn"] = 1661 605 | domainext["org.to"] = 1662; domainext["org.tp"] = 1663; domainext["org.tr"] = 1664 606 | domainext["org.travel"] = 1665; domainext["org.tt"] = 1666; domainext["org.tv"] = 1667 607 | domainext["org.tw"] = 1668; domainext["org.tz"] = 1669; domainext["org.ua"] = 1670 608 | domainext["org.ug"] = 1671; domainext["org.uk"] = 1672; domainext["org.um"] = 1673 609 | domainext["org.us"] = 1674; domainext["org.uy"] = 1675; domainext["org.uz"] = 1676 610 | domainext["org.va"] = 1677; domainext["org.vc"] = 1678; domainext["org.ve"] = 1679 611 | domainext["org.vg"] = 1680; domainext["org.vi"] = 1681; domainext["org.vn"] = 1682 612 | domainext["org.vu"] = 1683; domainext["org.wf"] = 1684; domainext["org.ws"] = 1685 613 | domainext["org.ye"] = 1686; domainext["org.yt"] = 1687; domainext["org.za"] = 1688 614 | domainext["org.zm"] = 1689; domainext["org.zw"] = 1690; 615 | } 616 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 域名解析错误提示 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 | 21 |

联系 im16hot#gmail.com

22 | 23 | 24 | 25 | 29 | 30 | 31 | 32 | 36 | 37 | 38 | 39 | 43 |

44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /mail.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "errors" 6 | "fmt" 7 | "net/mail" 8 | "net/smtp" 9 | "time" 10 | "strings" 11 | "log" 12 | ) 13 | 14 | type Mailer struct { 15 | Subject string 16 | Content string 17 | To string 18 | } 19 | 20 | var mailChan = make(chan *Mailer) 21 | 22 | // 运行一个监听发送邮件任务 23 | func MailSendServer() { 24 | // mailChan = make(chan *Mailer) 25 | log.Println( "Running Mail Send Server..." ) 26 | 27 | for { 28 | 29 | mail := <-mailChan 30 | 31 | if mail == nil { 32 | continue 33 | } 34 | 35 | m := NewMailMessage( mail.Subject, mail.Content, mail.To ) 36 | if err := m.Send(); err != nil { 37 | log.Println( "send mail to " + mail.To + " error %s", err ) 38 | } 39 | } 40 | 41 | } 42 | 43 | func MailSender( subject, content, to string ) ( err error ) { 44 | 45 | if subject != "" && content != "" && to != "" { 46 | if AppConfig.smtpDaemon { 47 | mailChan <- &Mailer{ Subject: subject, Content: content, To: to } 48 | } else { 49 | m := NewMailMessage( subject, content, to ) 50 | if err = m.Send(); err != nil { 51 | log.Println( "send mail to " + to + " error %s", err ) 52 | return err 53 | } 54 | } 55 | 56 | return nil 57 | } 58 | 59 | return errors.New("input is null") 60 | } 61 | 62 | 63 | func NewMailMessage(subject, content, to string) *MailMessage { 64 | tos := strings.Split( to, "," ) 65 | message := &MailMessage{Subject: subject, Content: content, 66 | To: make([]mail.Address, len(tos))} 67 | 68 | for k, v := range tos { 69 | message.To[k].Address = v 70 | } 71 | 72 | //fmt.Println( message.To ) 73 | return message 74 | } 75 | 76 | func NewMailMessageFrom(subject, content, from, to string) *MailMessage { 77 | message := NewMailMessage(subject, content, to) 78 | message.From.Address = from 79 | return message 80 | } 81 | 82 | const crlf = "\r\n" 83 | 84 | type MailMessage struct { 85 | From mail.Address // if From.Address is empty, Config.DefaultFrom will be used 86 | To []mail.Address 87 | Cc []mail.Address 88 | Bcc []mail.Address 89 | Subject string 90 | Content string 91 | } 92 | 93 | // http://tools.ietf.org/html/rfc822 94 | // http://tools.ietf.org/html/rfc2821 95 | func (self *MailMessage) String() string { 96 | var buf bytes.Buffer 97 | 98 | write := func(what string, recipients []mail.Address) { 99 | if len(recipients) == 0 { 100 | return 101 | } 102 | for i := range recipients { 103 | if i == 0 { 104 | buf.WriteString(what) 105 | } else { 106 | buf.WriteString(", ") 107 | } 108 | buf.WriteString(recipients[i].String()) 109 | } 110 | buf.WriteString(crlf) 111 | } 112 | 113 | from := &self.From 114 | if from.Address == "" { 115 | from = &mail.Address{ "domainpark", AppConfig.smtpUser }//&Config.From 116 | } 117 | 118 | /*if AppConfig.adminMail != "" { 119 | self.Bcc = make([]mail.Address, 1) 120 | self.Bcc[0] = mail.Address{ "adminer", AppConfig.adminMail } 121 | }*/ 122 | 123 | 124 | fmt.Fprintf(&buf, "From: %s%s", from.String(), crlf) 125 | write("To: ", self.To) 126 | write("Cc: ", self.Cc) 127 | write("Bcc: ", self.Bcc) 128 | fmt.Fprintf(&buf, "Date: %s%s", time.Now().UTC().Format(time.RFC822), crlf) 129 | fmt.Fprintf(&buf, "Subject: %s%s%s", self.Subject, crlf, self.Content) 130 | return buf.String() 131 | } 132 | 133 | // Returns the first error 134 | func (self *MailMessage) Validate() error { 135 | if len(self.To) == 0 { 136 | return errors.New("Missing email recipient (email.Message.To)") 137 | } 138 | return nil 139 | } 140 | 141 | type fakeAuth struct { 142 | smtp.Auth 143 | } 144 | 145 | func (a fakeAuth) Start(server *smtp.ServerInfo) (string, []byte, error) { 146 | server.TLS = true 147 | return a.Auth.Start(server) 148 | } 149 | 150 | 151 | func (self *MailMessage) Send() error { 152 | var auth smtp.Auth 153 | 154 | if err := self.Validate(); err != nil { 155 | return err 156 | } 157 | 158 | to := make([]string, len(self.To)) 159 | for i := range self.To { 160 | to[i] = self.To[i].Address 161 | } 162 | 163 | from := self.From.Address 164 | if from == "" { 165 | from = AppConfig.smtpUser// Config.From.Address 166 | } 167 | 168 | addr := fmt.Sprintf("%s:%d", AppConfig.smtpHost, AppConfig.smtpPort) 169 | 170 | if AppConfig.smtpTLS { 171 | auth = fakeAuth{smtp.PlainAuth("", AppConfig.smtpUser, 172 | AppConfig.smtpPassword, AppConfig.smtpHost)} 173 | } else { 174 | auth = smtp.PlainAuth("", AppConfig.smtpUser, AppConfig.smtpPassword, 175 | AppConfig.smtpHost) 176 | } 177 | 178 | return smtp.SendMail(addr, auth, from, to, []byte(self.String())) 179 | } 180 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | //"io/ioutil" 6 | "flag" 7 | "html/template" 8 | "net" 9 | "net/http" 10 | "os" 11 | "strconv" 12 | "strings" 13 | "time" 14 | //"strings" 15 | redis "github.com/alphazero/Go-Redis" 16 | config "github.com/jonsen/goconfig/config" 17 | ) 18 | 19 | const ( 20 | cfgFileDefault = "./serverd.conf" 21 | ) 22 | 23 | type sysCfg struct { 24 | // SiteName string 25 | logfile, reportTo, webDir, webHost string 26 | webPort, debug int 27 | 28 | // redis setup 29 | redisHost, redisAuth, redisKeyFix string 30 | redisPort, redisDb int 31 | 32 | // SMTP setup 33 | smtpHost, smtpUser, smtpPassword string 34 | smtpPort int 35 | smtpAuth, smtpTLS, smtpDaemon bool 36 | } 37 | 38 | var AppConfig sysCfg 39 | 40 | // Read cfgfile or setup defaults. 41 | func setupConfig() { 42 | // 初始化读取配置文件 43 | c, err := config.ReadDefault(*cfgfile) 44 | if err != nil { 45 | fmt.Println("read config file error: ", *cfgfile, err) 46 | os.Exit(1) 47 | } 48 | 49 | // 读取[common]段配置 50 | 51 | AppConfig.webHost, _ = c.String("common", "webhost") 52 | AppConfig.webPort, _ = c.Int("common", "webport") 53 | AppConfig.debug, _ = c.Int("common", "debug") 54 | AppConfig.logfile, _ = c.String("common", "log") 55 | AppConfig.reportTo, _ = c.String("common", "reportto") 56 | AppConfig.webDir, _ = c.String("common", "webdir") 57 | 58 | AppConfig.redisHost, _ = c.String("redis", "host") 59 | AppConfig.redisAuth, _ = c.String("redis", "auth") 60 | AppConfig.redisKeyFix, _ = c.String("redis", "key_prefix") 61 | AppConfig.redisPort, _ = c.Int("redis", "prt") 62 | AppConfig.redisDb, _ = c.Int("redis", "db") 63 | 64 | // SMTP 65 | AppConfig.smtpHost, _ = c.String("smtp", "host") 66 | AppConfig.smtpUser, _ = c.String("smtp", "user") 67 | AppConfig.smtpPassword, _ = c.String("smtp", "password") 68 | AppConfig.smtpPort, _ = c.Int("smtp", "port") 69 | AppConfig.smtpAuth, _ = c.Bool("smtp", "auth") 70 | AppConfig.smtpTLS, _ = c.Bool("smtp", "tls") 71 | AppConfig.smtpDaemon, _ = c.Bool("smtp", "daemon") 72 | 73 | } 74 | 75 | func redisConnect() (rd redis.Client, err error) { 76 | spec := redis.DefaultSpec().Db(AppConfig.redisDb) 77 | if AppConfig.redisHost != "" { 78 | spec.Host(AppConfig.redisHost) 79 | } 80 | if AppConfig.redisAuth != "" { 81 | spec.Password(AppConfig.redisAuth) 82 | } 83 | port := AppConfig.redisPort 84 | if port > 0 && port < 65535 { 85 | spec.Port(port) 86 | } 87 | 88 | rd, err = redis.NewSynchClientWithSpec(spec) 89 | if err != nil { 90 | fmt.Printf("Connect Redis: %s", err) 91 | return rd, err 92 | } 93 | 94 | return rd, nil 95 | } 96 | 97 | func rediClose() { 98 | 99 | } 100 | 101 | func yesterday() string { 102 | 103 | y := time.Now().Unix() - 86400 104 | 105 | n := time.Unix(y, 0).Format("20060102") 106 | 107 | //fmt.Println(y, n) 108 | 109 | return n 110 | } 111 | 112 | func report() (rep string, err error) { 113 | rd, err := redisConnect() 114 | if err != nil { 115 | fmt.Println(err) 116 | return 117 | } 118 | 119 | defer rd.Quit() 120 | 121 | date := yesterday() //time.Now().Format("20060102") 122 | keys := "*:" + date 123 | 124 | rep = "HI\n" 125 | rep += " This report for " + date + "\n" 126 | rep += " Domain and count:\n\n" 127 | 128 | list, err := rd.Keys(keys) 129 | if err != nil { 130 | return "", err 131 | } 132 | // fmt.Println(list) 133 | var total int 134 | for _, v := range list { 135 | count, _ := rd.Get(v) 136 | rep += " " + v + ": " + string(count) + "\n" 137 | c, _ := strconv.Atoi(string(count)) 138 | total += c 139 | } 140 | 141 | rep += "\n\nTotal: " + strconv.Itoa(total) 142 | rep += "\n\n" 143 | 144 | return rep, nil 145 | 146 | } 147 | 148 | func reportServer() { 149 | var day int 150 | 151 | fmt.Println("running report server ...") 152 | 153 | for { 154 | currDay := time.Now().Day() 155 | //fmt.Println( currDay, day ) 156 | if day != currDay { 157 | // execute send mail ... 158 | fmt.Println("send mail now ...") 159 | reportBody, err := report() 160 | if err == nil { 161 | err = MailSender("Domain Park Report "+ 162 | time.Now().Format("2006-01-02"), reportBody, AppConfig.reportTo) 163 | if err != nil { 164 | fmt.Println("send mail err", err) 165 | } else { 166 | //fmt.Println("send mail ok") 167 | } 168 | } 169 | 170 | day = currDay 171 | } 172 | time.Sleep(30 * time.Minute) 173 | } 174 | 175 | } 176 | 177 | /** 178 | * 连接入口 179 | * 180 | * author: jonsen yang 181 | * date: 2012-10-17 182 | */ 183 | func makeHandler(w http.ResponseWriter, r *http.Request) { 184 | if r.RequestURI == "/favicon.ico" || r.RequestURI == "/robots.txt" { 185 | //http.NotFound(w,r) 186 | return 187 | } 188 | //fmt.Printf( "[%v] %s %s %s %s %v\n",time.Now(), r.RemoteAddr, r.Method, r.Host, r.RequestURI, r.Referer() ) 189 | 190 | t, err := template.ParseFiles(AppConfig.webDir + "index.html") 191 | if err != nil { 192 | fmt.Println(err) 193 | return 194 | } 195 | t.Execute(w, nil) 196 | 197 | hosts := strings.Split(r.Host, ":") 198 | // fmt.Println(r.Host, hosts, r.RequestURI ) 199 | // fmt.Println( getDomainRoot( hosts[0] ) ) 200 | 201 | domain, rootid := getDomainRoot(strings.ToLower(hosts[0])) 202 | if domain == "" || rootid < 1 { 203 | //fmt.Println( domain, rootid ) 204 | return 205 | } 206 | 207 | rd, err := redisConnect() 208 | if err != nil { 209 | fmt.Println(err) 210 | return 211 | } 212 | 213 | date := time.Now().Format("20060102") 214 | fmt.Println(domain + ":" + date) 215 | 216 | key := domain + ":" + date 217 | rd.Incr(key) 218 | 219 | rd.Quit() 220 | 221 | } 222 | 223 | var cfgfile = flag.String("c", cfgFileDefault, "Config file") 224 | 225 | func main() { 226 | flag.Parse() 227 | setupConfig() 228 | initDomainExt() 229 | 230 | yesterday() 231 | 232 | go reportServer() 233 | 234 | var listen string 235 | if AppConfig.webHost != "" && net.ParseIP(AppConfig.webHost) != nil { 236 | listen = fmt.Sprintf("%s:%d", AppConfig.webHost, AppConfig.webPort) 237 | } else { 238 | listen = fmt.Sprintf(":%d", AppConfig.webPort) 239 | } 240 | 241 | http.HandleFunc("/", makeHandler) 242 | err := http.ListenAndServe(listen, nil) 243 | if err != nil { 244 | fmt.Println("Run server err", err) 245 | os.Exit(1) 246 | } 247 | 248 | } 249 | -------------------------------------------------------------------------------- /serverd.conf: -------------------------------------------------------------------------------- 1 | [common] 2 | webhost = 127.0.0.1 3 | webport = 9090 4 | daemon = true 5 | debug = 5 6 | reportto = 7 | webdir = /opt/www/workspace/domainpark/ 8 | 9 | [redis] 10 | host = localhost 11 | port = 6379 12 | auth = 13 | db = 14 | 15 | [smtp] 16 | daemon = false 17 | host = smtp.gmail.com 18 | port = 587 19 | user = yourname@gmail.com 20 | password = yourpassword 21 | auth = true 22 | tls = true 23 | 24 | --------------------------------------------------------------------------------