真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言獲取主機(jī)ip,go語言做服務(wù)器

如何查找服務(wù)器/主機(jī)的IP地址?

1,打開我們的計(jì)算機(jī),點(diǎn)擊一下我們的左下角的開始菜單,搜索“運(yùn)行”。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了廣饒免費(fèi)建站歡迎大家使用!

2,點(diǎn)擊運(yùn)行,或者按住鍵盤上的開始鍵+R鍵,然后會彈出一個運(yùn)行窗口。

3,輸入cmd命令,然后點(diǎn)擊回車,進(jìn)入到命令的編輯界面,確定后,我們就會來到如下圖所示的頁面,然后將我們的輸入法調(diào)節(jié)到英文狀態(tài)下。

4,然后在打開的命令行窗口中輸入 ipconfig/all?,回車(Enter)。

5,輸入上述命令后,可以看到會出現(xiàn)很多的信息,找到IP地址和DNS服務(wù)器地址選項(xiàng),在這里就可以看到?IP地址、DNS服務(wù)地址了、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)等信息了。

go語言中怎么獲取域名對應(yīng)的ip地址

package main

import (

"fmt"

"net"

"os"

)

func main() {

addrs, err := net.InterfaceAddrs()

if err != nil {

fmt.Println(err)

os.Exit(1)

}

for _, address := range addrs {

// 檢查ip地址判斷是否回環(huán)地址

if ipnet, ok := address.(*net.IPNet); ok !ipnet.IP.IsLoopback() {

if ipnet.IP.To4() != nil {

fmt.Println(ipnet.IP.String())

}

}

}

}

如何獲取主機(jī)的ip?

1、當(dāng)客戶機(jī)提出查詢請求時,首先在本地計(jì)算機(jī)的緩存中查找。如果在本地?zé)o法獲得查詢信息,則將查詢請求發(fā)給dns服務(wù)器。

2、首先客戶機(jī)將域名查詢請求發(fā)送到本地dns服務(wù)器,當(dāng)本地dns服務(wù)器接到查詢后,首先在該服務(wù)器管理的區(qū)域的記錄中查找,如果找到該記錄,則利用此記錄進(jìn)行解析;如果沒有區(qū)域信息可以滿足查詢要求,服務(wù)器在本地的緩存中查找。

3、如果本地服務(wù)器不能在本地找到客戶機(jī)查詢的信息,將客戶機(jī)請求發(fā)送到根域名dns服務(wù)器。

4、根域名服務(wù)器負(fù)責(zé)解析客戶機(jī)請求的根域部分,它將包含下一級域名信息的dns服務(wù)器地址返回給客戶機(jī)的dns服務(wù)器地址。

5、客戶機(jī)的dns服務(wù)器利用根域名服務(wù)器解析的地址訪問下一級dns服務(wù)器,得到再下一級域我的dns服務(wù)器地址。

6、按照上述遞歸方法逐級接近查詢目標(biāo),最后在有目標(biāo)域名的dns服務(wù)器上找到相應(yīng)ip地址信息。

7、客戶機(jī)的本地dns服務(wù)器將遞歸查詢結(jié)果返回客戶機(jī)。

8、客戶機(jī)利用從本地dns服務(wù)器查詢得到的ip訪問目標(biāo)主機(jī),就完成了一個解析過程。

Golang 綁定mac和ip地址,限制服務(wù)器

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

運(yùn)行效果:系統(tǒng)可正常編譯,正常訪問,在用戶Auth接口進(jìn)行核對。

//檢驗(yàn)Mac和內(nèi)網(wǎng)IP,測試環(huán)境不做校驗(yà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("示授權(quán)的應(yīng)用MAC,請聯(lián)系")

}

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("示授權(quán)的應(yīng)用IP,請聯(lián)系")

}

return nil

}

項(xiàng)目使用GoFrame框架1.6。考慮到客戶可能會對內(nèi)存數(shù)據(jù)做分析破解,可以把mac和ip地址做AES加密。

如何獲取本地和遠(yuǎn)程主機(jī)的IP及MAC地址

向大家介紹一下我們將如何獲得一臺主機(jī)的IP地址。在Win32 API中我們可以使用NetWork API完成這項(xiàng)工作,但是在.Net平臺下我們應(yīng)當(dāng)如何做呢?其實(shí)操作方法與API差不多,只是大家要理解一下Namespace與Class。本站這方面的文章很多,關(guān)于Namespace與Class的內(nèi)容就不介紹了。

.Net平臺存在System.Net命名空間,其中的DNS類,提供了一些方法可以獲取服務(wù)器的服務(wù)名或者是IP地址。DNS是一個靜態(tài)類,所以它能夠直接創(chuàng)建類實(shí)例。閑話少說,我們來看具體的程序:

namespace NKUtilities

{

using System;

using System.Net;

public class DNSUtility

{

public static int Main (string [] args)

{

String strHostName = new String ("");

if (args.Length == 0)

{

// 獲得本地的IP地址

//首先獲了本地機(jī)的主機(jī)名

strHostName = DNS.GetHostName ();

Console.WriteLine ("Local Machine''s Host Name: " + strHostName);

}

else

{

strHostName = args[0];

}

// 接著使用主機(jī)名,獲取IP地址列表

// 一臺主機(jī)可能不只一個IP哦,不要被某些人誤導(dǎo)了,呵呵,想想以前的163與169就知道了

IPHostEntry ipEntry = DNS.GetHostByName (strHostName);

IPAddress [] addr = ipEntry.AddressList;

for (int i = 0; i addr.Length; i++)

{

Console.WriteLine ("IP Address {0}: {1} ", i, addr[i].ToString ());

}

return 0;

}

}

}

如果你想獲得主機(jī)名,你可以使用不帶參數(shù)的GetHostName方法,接著使用這個主機(jī)名作為參數(shù)交給GetHostByName方法,以獲取IPAddress列表。最后是輸出列表中的IP地址。

C#編程之 如何獲取本地和遠(yuǎn)程主機(jī)的IP及MAC地址

利用dns類和WMI規(guī)范獲取IP及MAC地址

在C#編程中,要獲取主機(jī)名和主機(jī)IP地址,是比較容易的.它提供的Dns類,可以輕松的取得主機(jī)名和IP地址.

示例:

string strHostName = Dns.GetHostName(); //得到本機(jī)的主機(jī)名

IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本機(jī)IP

string strAddr = ipEntry.AddressList[0].ToString(); //假設(shè)本地主機(jī)為單網(wǎng)卡

在這段代碼中使用了兩個類,一個是Dns類,另一個為IPHostEntry類,二者都存在于命名空間System.Net中.

Dns類主要是從域名系統(tǒng)(DNS)中檢索關(guān)于特定主機(jī)的信息,上面的代碼第一行就從本地的DNS中檢索出本地主機(jī)名.

IPHostEntry類則將一個域名系統(tǒng)或主機(jī)名與一組IP地址相關(guān)聯(lián),它與DNS類一起使用,用于獲取主機(jī)的IP地址組.

要獲取遠(yuǎn)程主機(jī)的IP地址,其方法也是大同小異.

在獲取了IP地址后,如果還需要取得網(wǎng)卡的MAC地址,就需要進(jìn)一步探究了.

這里又分兩種情況,一是本機(jī)MAC地址,二是遠(yuǎn)程主機(jī)MAC地址.二者的獲取是完全不同的.

在獲取本機(jī)的MAC地址時,可以使用WMI規(guī)范,通過SELECT語句提取MAC地址.在.NET框架中,WMI規(guī)范的實(shí)現(xiàn)定義在System.Management命名空間中.

ManagementObjectSearcher類用于根據(jù)指定的查詢檢索管理對象的集合

ManagementObjectCollection類為管理對象的集合,下例中由檢索對象返回管理對象集合賦值給它.

示例:

ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;

ManagementObjectCollection queryCollection = query.Get();

foreach( ManagementObject mo in queryCollection )

{

if(mo["IPEnabled"].ToString() == "True")

mac = mo["MacAddress"].ToString();

}

獲取遠(yuǎn)程主機(jī)的MAC地址時,需要借用API函數(shù)SendARP.該函數(shù)使用ARP協(xié)議,向目的主機(jī)發(fā)送ARP包,利用返回并存儲在高速緩存中的IP和MAC地址對,從而獲取遠(yuǎn)程主機(jī)的MAC地址.

示例:

Int32 ldest= inet_addr(remoteIP); //目的ip

Int32 lhost= inet_addr(localIP); //本地ip

try

{

Int64 macinfo = new Int64();

Int32 len = 6;

int res = SendARP(ldest,0, ref macinfo, ref len); //發(fā)送ARP包

return Convert.ToString(macinfo,16);

}

catch(Exception err)

{

Console.WriteLine("Error:{0}",err.Message);

}

return 0.ToString();

但使用該方式獲取MAC時有一個很大的限制,就是只能獲取同網(wǎng)段的遠(yuǎn)程主機(jī)MAC地址.因?yàn)樵跇?biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議下,ARP包是不能跨網(wǎng)段傳輸?shù)?,故想通過ARP協(xié)議是無法查詢跨網(wǎng)段設(shè)備MAC地址的。

示例程序:

using System.Net;

using System;

using System.Management;

using System.Runtime.InteropServices;

public class getIP

{

[DllImport("Iphlpapi.dll")]

private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);

[DllImport("Ws2_32.dll")]

private static extern Int32 inet_addr(string ip);

//獲取本機(jī)的IP

public string getLocalIP()

{

string strHostName = Dns.GetHostName(); //得到本機(jī)的主機(jī)名

IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本機(jī)IP

string strAddr = ipEntry.AddressList[0].ToString();

return(strAddr);

}

//獲取本機(jī)的MAC

public string getLocalMac()

{

string mac = null;

ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;

ManagementObjectCollection queryCollection = query.Get();

foreach( ManagementObject mo in queryCollection )

{

if(mo["IPEnabled"].ToString() == "True")

mac = mo["MacAddress"].ToString();

}

return(mac);

}

//獲取遠(yuǎn)程主機(jī)IP

public string[] getRemoteIP(string RemoteHostName)

{

IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);

IPAddress[] IpAddr = ipEntry.AddressList;

string[] strAddr = new string[IpAddr.Length];

for (int i=0;i {

strAddr[i] = IpAddr[i].ToString();

}

return(strAddr);

}

//獲取遠(yuǎn)程主機(jī)MAC

public string getRemoteMac(string localIP, string remoteIP)

{

Int32 ldest= inet_addr(remoteIP); //目的ip

Int32 lhost= inet_addr(localIP); //本地ip

try

{

Int64 macinfo = new Int64();

Int32 len = 6;

int res = SendARP(ldest,0, ref macinfo, ref len);

return Convert.ToString(macinfo,16);

}

catch(Exception err)

{

Console.WriteLine("Error:{0}",err.Message);

}

return 0.ToString();

}

public static void Main(string[] args)

{

getIP gi = new getIP();

Console.WriteLine("本地網(wǎng)卡信息:");

Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());

Console.WriteLine("/n/r遠(yuǎn)程網(wǎng)卡信息:");

string[] temp = gi.getRemoteIP("scmobile-tj2");

for(int i=0;i {

Console.WriteLine(temp[i]);

}

Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));

}

}

可以用.Net的DNS類來獲取一個主機(jī)名或一個給定主機(jī)的IP地址。要想在程序中使用DNS類,就需要包含System.Net:

Include System.Net Reference

比如說想獲取的IP地址,以下代碼就會完成這個任務(wù):

// Call DNS.GetHostName to get IPHostEntry and get the IP address list.

IPHostEntry ipEntry = DNS.GetHostByName ("");

IPAddress [] IpAddr = ipEntry.AddressList;

for (int i = 0; i IpAddr.Length; i++){

Console.WriteLine ("IP Address {0}: {1} ", i, IpAddr[i].ToString ());

}

另外,使用無參數(shù)的GetHostName可以返回本地機(jī)器的主機(jī)名:

string strHostName = DNS.GetHostName ();

然后將這個主機(jī)名作為參數(shù)傳遞給GetHostByName,就可以獲取本地機(jī)器的IP地址信息。

如何使用Go語言實(shí)現(xiàn)遠(yuǎn)程執(zhí)行命令

一般命令

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

連接

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

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

}

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

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

連接成功后,執(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")

}

上面代碼運(yùn)行之后,雖然命令正常執(zhí)行了,但是沒有正常輸出的結(jié)果,也沒有異常輸出的結(jié)果。 要想顯示結(jié)果,需要將 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")

}

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

交互式命令

上面的方式無法遠(yuǎn)程執(zhí)行交互式命令,比如 top , 遠(yuǎn)程編輯一個文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要當(dāng)前的terminal來接管遠(yuǎn)程的 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")

}


文章標(biāo)題:go語言獲取主機(jī)ip,go語言做服務(wù)器
網(wǎng)頁鏈接:http://weahome.cn/article/dssgdcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部