NewCSVWriter 创建新的CSV写入器
(filename string)
| 17 | |
| 18 | // NewCSVWriter 创建新的CSV写入器 |
| 19 | func NewCSVWriter(filename string) (*CSVWriter, error) { |
| 20 | file, err := os.Create(filename) |
| 21 | if err != nil { |
| 22 | return nil, fmt.Errorf("创建输出文件失败: %v", err) |
| 23 | } |
| 24 | |
| 25 | writer := csv.NewWriter(file) |
| 26 | |
| 27 | // 写入CSV头部 |
| 28 | headers := []string{ |
| 29 | "IP", |
| 30 | "ORIGIN", |
| 31 | "PORT", |
| 32 | "CERT_DOMAIN", |
| 33 | "CERT_ISSUER", |
| 34 | "TLS_VERSION", |
| 35 | "ALPN", |
| 36 | "CURVE", |
| 37 | "GEO_CODE", |
| 38 | "FEASIBLE", |
| 39 | "RESPONSE_TIME_MS", |
| 40 | "ERROR", |
| 41 | "SCAN_TIME", |
| 42 | } |
| 43 | |
| 44 | if err := writer.Write(headers); err != nil { |
| 45 | file.Close() |
| 46 | return nil, fmt.Errorf("写入CSV头部失败: %v", err) |
| 47 | } |
| 48 | |
| 49 | writer.Flush() |
| 50 | |
| 51 | return &CSVWriter{ |
| 52 | file: file, |
| 53 | writer: writer, |
| 54 | }, nil |
| 55 | } |
| 56 | |
| 57 | // WriteResult 写入扫描结果 |
| 58 | func (cw *CSVWriter) WriteResult(result ScanResult) error { |
no test coverage detected