第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 golang 中進行 spf 記錄查找和檢查?

如何在 golang 中進行 spf 記錄查找和檢查?

Go
縹緲止盈 2022-05-23 17:52:53
我需要進行域 spf 查找并返回 PASS / FAIL 如果失敗,我需要返回 SPF 記錄以進行進一步診斷github上似乎有很多用于SPF檢查的golang模塊,但它們似乎都沒有維護還有什么是“官方”支持的模塊使用這是我的代碼,請評論package mainimport (    "fmt"    "io/ioutil"    "log"    "net"    "os"    "github.com/mileusna/spf")func main() {    domain := os.Args[1]    log.SetOutput(ioutil.Discard)   // If I dont do this there are a lot of debug logs     ip := net.ParseIP("1.2.3.4")    r := spf.CheckHost(ip, domain, "", "")    fmt.Printf("Domain = %s\nSPF=%s", domain, r.String())   // I need to return the value ,                                                            // How do I get the spf record }如果我下載 github 模塊并更改源代碼是個好主意嗎?
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

您可以參考這篇文章進行 SPF 查找。

https://ashish.one/gist/spf-lookup-in-go/

在此,它使用了這個 DNS 庫:

https://github.com/miekg/dns

正如您在問題中提到的那樣,SPF 查找只不過是獲取TXT Records和搜索字符串。v=spf1它也是這樣做的。

您可以使用任何適合您要求的模塊,并且可以對其進行更改。如果您發(fā)現(xiàn)您的更改也會對其他人有所幫助并且它更通用,那么您應該為特定的 git repo 提出 PR(拉取請求)與您的更改。

如果您的更改僅限于您的要求,那么您應該只使用該代碼供您使用。最好使用 fork,您可以通過更改維護自己的 repo。

如果您不采取任何 fork 并且仍在使用原始項目,那么將來將很難更新特定的庫。


查看完整回答
反對 回復 2022-05-23
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

我想了幾分鐘來回答這個問題。這樣做的原因是您顯然希望我們?yōu)槟喿x該模塊代碼并提出解決方案。老實說,這有點像你有“要求”,牽涉到業(yè)務。


但是,其他人可能會從中學習,您必須付出足夠的努力才能使代碼足夠健壯(IPv6,有人嗎?)。


基本上,您有兩個問題:“如何獲取域的 SPF 記錄并在有時返回它?” 和“如何正確處理 github(或一般基于 git 的代碼托管商)上的代碼提交?”


如何獲取域的 SPF 記錄(如果有)?

歸根結底,SPF 是一項利用現(xiàn)有技術的公約。SPF 條目只不過是域中特殊格式的 TXT 資源記錄。


因此,您不需要任何包來查找我們的域是否具有 SPF 條目:


package main


import (

    "flag"

    "log"

    "net"

    "os"

    "regexp"

)


var domain string


var spfPattern *regexp.Regexp

var verbose bool


func init() {


    // some flags to make the problem more usable.

    flag.StringVar(&domain, "domain", "", "the domain to check for SPF records")

    flag.BoolVar(&verbose, "verbose", false, "print moar!")


    // Obviously, this is a very, very simple pattern.

    // It lacks any true validation whether the TXT record

    // is in fact a valid SPF. Expanding the regex should

    // not be too hard and I leave it up to you.

    spfPattern = regexp.MustCompile(`\s*v=spf1.*`)

}


func main() {

    flag.Parse()


    // Lookup ALL resource records rs of type TXT for domain.

    rs, err := net.LookupTXT(domain)


    // If there was an error accessing the TXT records...

    if err != nil {

        // ...we inform the user and...

        log.Printf("accessing TXT records for %s", err)

        // ...inform the caller that something went wrong.

        os.Exit(1)

    }


    // Now we have all TXT records for the domain we iterate through them...

    for _, rr := range rs {

        // ... and if one of them matches the pattern of an SPF record...

        if spfPattern.MatchString(rr) {


            // ...we inform the user if the user requested it...

            if verbose {

                log.Printf("%s has a valid SPFv1 record: %s", domain, rr)

            }

            // ...or simply inform the caller, as per the UNIX convention

            // "No news is good news!"

            os.Exit(0)

        }

    }

    // We have iterated through all TXT records and did not find matching

    // the pattern of an SPF record, so we need to inform both the user...

    log.Println("No valid SPF record found.")


    // ...and the caller.

    os.Exit(2)

}

如何正確處理代碼貢獻

如果你看到你認為需要擴展的代碼,或者你發(fā)現(xiàn)了一個錯誤并且想要修復它,你首先想到的應該是fork 原始存儲庫——基本上,你制作它的副本,這樣做的好處是保留提交歷史。


接下來,你克隆你的 fork,并在那個 fork 上做你想做的工作。您應該使用一個或多個分支進行更改。每個提交都應該盡可能原子。理想情況下,庫編譯并且測試在任何提交之前和之后運行。


完成后,您認為您的代碼已準備好發(fā)布,您可以創(chuàng)建一個拉取請求。拉取請求基本上是說“嘿,原始存儲庫的所有者,我已經進行了一些更改并改進了代碼,您可能需要考慮將我的更改合并到原始代碼中!”


現(xiàn)在很多項目都使用一種叫做“gitflow”的分支模型,我強烈建議你記住它,直到你可以用非常高的 BAC 向后唱它。

http://img1.sycdn.imooc.com//628b599e0001f5cc09641287.jpg

查看完整回答
反對 回復 2022-05-23
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

我是您正在使用的包的作者https://github.com/mileusna/spf

包有函數(shù) LookupSPF(domain) 將返回 SPF TXT 記錄,請查看文檔https://pkg.go.dev/github.com/mileusna/spf#LookupSPF

對于維護,SPF 是根據最近沒有更新的 RFC 7208 實施的,并且沒有人報告包有任何問題,因此實際上不需要維護。:) 它只是工作,至少滿足我的需要。

順便說一句,我剛剛添加了支持 gor Go 模塊。

如果您有任何問題或建議,請在 GitHub 上發(fā)布。:)


查看完整回答
反對 回復 2022-05-23
  • 3 回答
  • 0 關注
  • 261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號