脚本编写学习日记:Go

Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后门可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的,相当于严格区分大小写

控制睡眠时间

package main

import (
   "flag"
   "fmt"
   "time"
)

var (
   period time.Duration
)

func init() {
   flag.DurationVar(&period, "period", 1*time.Second, "sleep period")
}
func main() {
   flag.Parse()
   fmt.Printf("sleeping for %v ...", period)
   time.Sleep(period)
   fmt.Println()
}

iota :无论加不加iota,iota都会自动从上到下由0~n,如果某一值等于iota,会自动填入当前iota的值,若下方的值未定义,则会当前iota+1并填入下方的变量中作为值

package main
​
import "fmt"
​
func main() {
   const (
      a = iota //0
      b        //1
      c        //2
      d = "ha" //独立值,iota += 1
      e        //"ha"   iota += 1
      f = 100  //iota +=1
      g        //100  iota +=1
      h = iota //7,恢复计数
      i        //8
   )
   fmt.Println(a, b, c, d, e, f, g, h, i)
}
go
运算符描述实例
&按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。(A & B) 结果为 12, 二进制为 0000 1100
|按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或(A | B) 结果为 61, 二进制为 0011 1101
^按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(A ^ B) 结果为 49, 二进制为 0011 0001
<<左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,二进制为 1111 0000
>>右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。

A >> 2 结果为 15 ,二进制为 0000 1111

if 、fmt.Scan(&a)接收值判断

package main

import "fmt"

var (
   a int
   b int
)

func main() {
   fmt.Println("请输入密码:")
   fmt.Scan(&a)
   if a == 123456 {
      fmt.Println("请再次输入密码:")
      fmt.Scan(&b)
      if b == a {
         fmt.Println("重置密码成功")
      } else {
         fmt.Println("两次输入的密码不相同")
      }
   } else {
      println("傻鸟")
   }
}

switch用法

package main

import (
	"flag"
	"fmt"
)

var (
	grade string
	score int
)

func init() {
	flag.IntVar(&score, "s", 0, "Enter your score!!!")
}

func main() {
	flag.Parse()
	fmt.Println("来自60分高手的评价 :")
	switch {
	case score < 0:
		grade = "滚蛋,傻鸟"
	case score == 0:
		grade = "输入你的分数呀,等啥呢?"
	case score < 60:
		grade = "傻鸟,都没及格"
	case score == 60:
		grade = "及格万岁"
	case score <= 70:
		if score == 61 {
			fmt.Printf("tql,找我领10元")
			break
		}
		grade = "不错不错"
	case score <= 80:
		grade = "还行"
	case score <= 90:
		grade = "凑合吧"
	case score <= 100:
		grade = "哦"
	default:
		grade = "滚蛋,傻鸟"
	}
	println(grade)
}

select(id=1不知道去哪里了)

package main

import (
   "flag"
   "fmt"
   "strconv"
)

var (
   num1 = 1
   dir  string
   url  string
)

func init() {
   flag.StringVar(&dir, "dir", "default", "Enter the dir")
   flag.StringVar(&url, "url", "http://127.0.0.1/", "Enter the url")
}

func main() {
   flag.Parse()
   ch1 := make(chan string)
   for i := 1; i < 10; i++ {
      num1 = num1 + 1
      go func() {
         str1 := strconv.Itoa(num1)
         ch1 <- str1
      }()
      select {
      case num2 := <-ch1:
         urls := url + dir + "?id=" + num2
         println(urls)
      default:
         fmt.Println("I am hacker")
      }
   }
}

range

package main

import "fmt"

var (
   num1 []int
   x, y int
)

func main() {
   for i := 1; i <= 100; i++ {
      num1 = append(num1, i)
   }
   fmt.Println(num1)
   for _, x = range num1 {
      fmt.Println(x)
   }
}

逐行读取文件并拼接路径

package main

import (
   "bufio"
   "flag"
   "fmt"
   "io"
   "os"
)

var (
   urlfile string
   dir     string
)

func init() {
   flag.StringVar(&urlfile, "u", "url.txt", "Enter the url_file_path eg : url.txt")
   flag.StringVar(&dir, "d", "/index.php", "Enter the dir eg : /index.php")
}

func main() {
   flag.Parse()
   url, err := os.Open(urlfile)
   if err != nil {
      panic(err)
   }
   defer url.Close()
   urlline := bufio.NewReader(url)
   for {
      content, _, err := urlline.ReadLine()
      if err == io.EOF {
         break
      }
      content1 := fmt.Sprintf("%s%s", string(content), dir)
      fmt.Println(content1)
   }
}

自己写的简单的poc

package main

import (
   "bufio"
   "crypto/tls"
   "flag"
   "fmt"
   "io"
   "io/ioutil"
   "log"
   "net"
   "net/http"
   "os"
   "strings"
   "time"
)

var (
   urlfile string
   dir     string
)

func init() {
   flag.StringVar(&urlfile, "f", "url.txt", "Enter the url_file_path eg : url.txt")
   flag.StringVar(&dir, "d", "/", "Enter the dir eg : /index.php")
}

func main() {
   flag.Parse()
   url, err := os.Open(urlfile)
   if err != nil {
      panic(err)
   }
   defer url.Close()
   urlline := bufio.NewReader(url)
   for {
      content, _, err := urlline.ReadLine()
      if err == io.EOF {
         break
      }
      content1 := fmt.Sprintf("%s%s", string(content), dir)
      fmt.Println(content1)
      statuscode := get_http(content1)
      fmt.Println(statuscode)
   }
}

func get_http(url string) int {
   transport := &http.Transport{
      TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
      DialContext: (&net.Dialer{
         Timeout:   5 * time.Second,
         KeepAlive: 30 * time.Second,
      }).DialContext,
   }
   client := &http.Client{
      Transport: transport,
   }
   response, err := client.Get(url)
   //response, err := http.Get(url)
   //ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
   //defer cancel()
   //req, err := http.NewRequest("GET", url, nil)
   //catchError(err)
   //response, err := http.DefaultClient.Do(req.WithContext(ctx))
   //response.Header.Set("Cookie", "user=admin")
   catchError(err)
   switch {
   case response.StatusCode < 200:
      fmt.Println("信息,服务器收到请求,需要请求者继续执行操作")
   case response.StatusCode < 300:
      fmt.Println("成功,操作被成功接收并处理")
   case response.StatusCode < 400:
      fmt.Println("重定向,需要进一步的操作以完成请求")
   case response.StatusCode < 500:
      fmt.Println("客户端错误,请求包含语法错误或无法完成请求")
   case response.StatusCode < 600:
      fmt.Println("服务器错误,服务器在处理请求的过程中发生了错误")
   }
   defer func() {
      response.Body.Close()
   }()
   res, err := ioutil.ReadAll(response.Body)
   catchError(err)
   if strings.Contains(string(res), "htmoffice") {
      fmt.Println("致远 OA A8 htmlofficeservlet getshell 漏洞")
   }
   return response.StatusCode
}
func catchError(err error) {
   defer func() {
      if er := recover(); er != nil {
         er1 := fmt.Sprintf("无法访问该页面:%v", er)
         fmt.Println(er1)
      }
   }()
   if err != nil {
      log.Fatal(err)
   }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值