最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
go語言模擬ip訪問,go 獲取本機ip

如何使用Go語言實現遠程執(zhí)行命令

一般命令

我們注重客戶提出的每個要求,我們充分考慮每一個細節(jié),我們積極的做好網站制作、做網站服務,我們努力開拓更好的視野,通過不懈的努力,成都創(chuàng)新互聯公司贏得了業(yè)內的良好聲譽,這一切,也不斷的激勵著我們更好的服務客戶。 主要業(yè)務:網站建設,網站制作,網站設計,重慶小程序開發(fā),網站開發(fā),技術開發(fā)實力,DIV+CSS,PHP及ASP,ASP.Net,SQL數據庫的技術開發(fā)工程師。

所謂一般命令,就是在一定時間內會執(zhí)行完的命令。比如 grep, cat 等等。 執(zhí)行命令的步驟是:連接,執(zhí)行,獲取結果

連接

連接包含了認證,可以使用 password 或者 sshkey 2種方式來認證。下面的示例為了簡單,使用了密碼認證的方式來完成連接。

import (

"fmt"

"time"

"golang.org/x/crypto/ssh"

)

func connect(user, password, host string, port int) (*ssh.Session, error) {

var (

auth []ssh.AuthMethod

addr string

clientConfig *ssh.ClientConfig

client *ssh.Client

session *ssh.Session

err error

)

// get auth method

auth = make([]ssh.AuthMethod, 0)

auth = append(auth, ssh.Password(password))

clientConfig = ssh.ClientConfig{

User: user,

Auth: auth,

Timeout: 30 * time.Second,

}

// connet to ssh

addr = fmt.Sprintf("%s:%d", host, port)

if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

return nil, err

}

// create session

if session, err = client.NewSession(); err != nil {

return nil, err

}

return session, nil

}

連接的方法很簡單,只要提供登錄主機的 用戶*, *密碼*, *主機名或者IP*, *SSH端口

執(zhí)行,命令獲取結果

連接成功后,執(zhí)行命令很簡單

import (

"fmt"

"log"

"os"

"time"

"golang.org/x/crypto/ssh"

)

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Run("ls /; ls /abc")

}

上面代碼運行之后,雖然命令正常執(zhí)行了,但是沒有正常輸出的結果,也沒有異常輸出的結果。 要想顯示結果,需要將 session 的 Stdout 和 Stderr 重定向 修改 func main 為如下:

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Run("ls /; ls /abc")

}

這樣就能在屏幕上顯示正常,異常的信息了。

交互式命令

上面的方式無法遠程執(zhí)行交互式命令,比如 top , 遠程編輯一個文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要當前的terminal來接管遠程的 PTY。

func main() {

session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)

if err != nil {

log.Fatal(err)

}

defer session.Close()

fd := int(os.Stdin.Fd())

oldState, err := terminal.MakeRaw(fd)

if err != nil {

panic(err)

}

defer terminal.Restore(fd, oldState)

// excute command

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Stdin = os.Stdin

termWidth, termHeight, err := terminal.GetSize(fd)

if err != nil {

panic(err)

}

// Set up terminal modes

modes := ssh.TerminalModes{

ssh.ECHO: 1, // enable echoing

ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud

ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud

}

// Request pseudo terminal

if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {

log.Fatal(err)

}

session.Run("top")

}

總結

好了,這樣就可以執(zhí)行交互式命令了,比如上面的 top 也可以通過 vi /etc/nginx/nignx.conf 之類的命令來遠程編輯文件。

Golang 綁定mac和ip地址,限制服務器

實際業(yè)務:go 二進制文件在私有化部署中,需要對客戶的服務器mac和ip進行綁定,系統只能運行在綁定的服務器上。把mac和ip地址配置到config中。

運行效果:系統可正常編譯,正常訪問,在用戶Auth接口進行核對。

//檢驗Mac和內網IP,測試環(huán)境不做校驗

func (c *CommonBase)CheckMacAndIp()error {

ipCfg :=g.Cfg().GetString("machine.Ipaddr")

macCfg :=g.Cfg().GetString("machine.Macip")

if ipCfg =="127.0.0.1" {

return nil

}

macArray,_ :=gipv4.GetMacArray()

if len(macArray) ==0 {

return gerror.New("mac地址獲取失敗")

}

if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {

return gerror.New("示授權的應用MAC,請聯系")

}

ipArray,_ :=gipv4.GetIpArray()

ipIntranetArray,_ :=gipv4.GetIntranetIpArray()

if len(ipArray) ==0 len(ipIntranetArray) ==0 {

return gerror.New("ip地址獲取失敗")

}

if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {

return gerror.New("示授權的應用IP,請聯系")

}

return nil

}

項目使用GoFrame框架1.6??紤]到客戶可能會對內存數據做分析破解,可以把mac和ip地址做AES加密。

golang echo(二)---請求與響應

上一章節(jié)介紹了使用echo啟動一個http服務器并提供一個簡單的GET接口,這一章對請求與響應做一下詳細的講解。

了解請求與響應之前首先要知道ehco框架提供了一個Context接口,Context 表示當前 HTTP 請求的上下文,我們需要知道的是Context的實現結構體context,context中包含了請求(request)、響應(response)以及參數等結構體,context是一個內部結構體,但是對外提供了訪問的方法,我們可以在開發(fā)中使用context提供的方法做很多事情,比如獲取請求路徑、客戶端ip、請求參數等等。

request是包含了當前請求信息的結構體,我們從中可以獲取到前后端約定好的參數來作出相應的業(yè)務邏輯,這下面開始模擬請求

首先模擬一個添加用戶的POST請求,這里使用了c.bind()這個方法,這個方法起到的作用是把表單參數或者JSON參數綁定至對應的結構體(這里必須是指針類型),字段需要一一對應,也就是說前端需要傳遞的表單或JSON參數名為name、age、gender才能綁定到結構體中。

接下來模擬一個GET請求用來獲取用戶信息

response是包含了返回信息的結構體,echo提供了多種類型的返回結果

上面編寫了處理請求的handler,這里介紹一下如何把handler注冊到路由中,這里對應的就是上面handler。


新聞標題:go語言模擬ip訪問,go 獲取本機ip
分享路徑:http://fisionsoft.com.cn/article/hojhij.html