由于買Raspberry沒有買顯示器赁还,所以在啟動(dòng)時(shí)不知道對(duì)應(yīng)的ip,使用不方便,有以下幾種做法:
- 通過
namp
掃描相應(yīng)的機(jī)器耸袜。 - 在啟動(dòng)時(shí)獲取ip的腳本并發(fā)送。
通過namp掃描
nmap 192.168.1.*
除去已經(jīng)知的牲平,則另一個(gè)為raspberry的ip堤框。
在啟動(dòng)時(shí)獲取IP并發(fā)送
其步驟如下:
- 編寫獲取IP的腳本。
- 在Raspberry啟動(dòng)腳本里面添加需要運(yùn)行的腳本欠拾。
此處使用go語言來編寫獲取IP的代碼胰锌,保存在/code/ip.go
中,其內(nèi)容如下:
package main
import (
"net/smtp"
"log"
"fmt"
"net"
)
func main() {
host := "smtp.163.com"
serverHost := host + ":25"
username := "xxxx@163.com"
password := "xxxxxx"
client, err := smtp.Dial(serverHost)
logger(err)
defer client.Close()
auth := smtp.PlainAuth("localhost",username, password, host)
err = client.Auth(auth)
logger(err)
err = client.Mail(username)
logger(err)
err = client.Rcpt(username)
logger(err)
wc, err := client.Data()
logger(err)
msg := []byte("Subject: ip")
_,err = wc.Write(msg)
wc.Write([]byte("\r\n\r\n"))
wc.Write([]byte(getIp()))
err = wc.Close()
logger(err)
client.Quit()
fmt.Println("send ip over....")
}
func logger(err error) {
if err != nil {
log.Fatal(err)
}
}
func getIp() string{
ipStr := ""
addrs,err := net.InterfaceAddrs()
if err != nil {
panic(err)
}
for _,addr := range addrs {
ipStr += addr.String() + "\n"
}
return ipStr
}
樹莓派的啟動(dòng)腳本為/etc/rc.local
藐窄,如果添加资昧,需要在其exit 0
這行前面添加,其內(nèi)容如下:
/usr/local/go/bin/go run /code/ip.go
這時(shí)重啟Raspberry后荆忍,收到郵件內(nèi)容如下:
127.0.0.1/8
192.168.1.7/24
::1/128
改進(jìn)版本(通過shell傳入IP)
這時(shí)發(fā)的內(nèi)容較多格带,此外還可以使用以下方法來解決撤缴,由于/etc/rc.local
中已經(jīng)有獲取IP的變量,這時(shí)可以在其后面叽唱,把這個(gè)參數(shù)傳入到go的發(fā)送郵件代碼里面即可屈呕。內(nèi)容如:
sleep 10
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
/usr/local/go/bin/go run /code/mail.go $_IP
exit 0
其中mail.go
內(nèi)容和ip.go
基本一致,只是把獲取IP的代碼去除棺亭,正文為傳入的IP,代碼中通過os.Args[1]
獲取傳入的參數(shù)虎眨。完整代碼如:
package main
import (
"net/smtp"
"log"
"fmt"
"os"
)
func main() {
host := "smtp.163.com"
serverHost := host + ":25"
username := "xxx@163.com"
password := "xxxxx"
client, err := smtp.Dial(serverHost)
logger(err)
defer client.Close()
auth := smtp.PlainAuth("localhost",username, password, host)
err = client.Auth(auth)
logger(err)
err = client.Mail(username)
logger(err)
err = client.Rcpt(username)
logger(err)
wc, err := client.Data()
logger(err)
msg := []byte("Subject: ip")
_,err = wc.Write(msg)
wc.Write([]byte("\r\n\r\n"))
wc.Write([]byte(os.Args[1]))
err = wc.Close()
logger(err)
client.Quit()
fmt.Println("send ip over....")
}
func logger(err error) {
if err != nil {
log.Fatal(err)
}
}
注意點(diǎn)
使用163郵箱發(fā)郵件時(shí),配置了密碼镶摘,仍然報(bào)認(rèn)證失敗嗽桩,其在客戶端使用的密碼使用的客戶端授權(quán)密碼