import ( "crypto/x509" "encoding/pem" "net" ) func main() { certBytes := []byte(`-----BEGIN CERTIFICATE----- MIIBkzCCATigAwIBAgIJAKx1Bt+RzGJEMAoGCCqGSM49BAMCMGIxCzAJBgNVBAYT AlVTMQswCQYDVQQIDAJDQTEQMA4GA1UEBwwHR29vZ2xlMQ8wDQYDVQQKDAZnb21h aW4xETAPBgNVBAsMCGFjY291bnRzMQ8wDQYDVQQDDAZnb21haW4wHhcNMTkwMTI3 MTQzMjMwWhcNMjkwMTI0MTQzMjMwWjBiMQswCQYDVQQGEwJVUzELMAkGA1UECAwC Q0ExEDAOBgNVBAcMB0dvb2dsZTEMMAoGA1UECgwDZ29tYWluMREwDwYDVQQLDAhh Y2NvdW50czEPMA0GA1UEAwwGZ29tYWluMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD QgAEJbGKF92pdjA9oML/QUwrUV1FzYDvAz8LZjQ26NlErb3qQJjK8X10yvlIzE70 eVgjvL8KRsfZJGFEe00P+oO2KaNjMGEwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSB 4kq3n/62gPAtZxlRfIrD1SbJjAfBgNVHSMEGDAWgBRkYP+r5bnPQwLedAPgVZ1u6 dU6H0TBMB8GA1UdIwQYMBaAFJuMvYHMs7uvJrzDDwkF0pSknzOJMAoGCCqGSM49 BAMCA0gAMEUCIQD6ZhzNR6UFUbU6OvmU/KvQaWmCd8VMxh1mUDaqzaxvMQIgWBZ8 fZLuMhrdPf+CzNcLXlcxRzRlNAm1peuiB1PhCN8= -----END CERTIFICATE-----`) block, _ := pem.Decode(certBytes) cert, _ := x509.ParseCertificate(block.Bytes) for _, ip := range cert.IPAddresses { if ip.To4() != nil { // IPv4 address } else if ip.To16() != nil { // IPv6 address } } }In this example, we parse a certificate from PEM-encoded bytes and iterate over its IP addresses. We determine whether each address is IPv4 or IPv6 using the To4 and To16 methods of the net.IP type. Package library: crypto/x509.