@@ -39,7 +39,7 @@ var stepDescriptions = map[string]string{
3939
4040var scanCmd = & cobra.Command {
4141 Use : "scan" ,
42- Short : "Full scan pipeline: ping -> resolve -> nxdomain -> tunnel -> e2e" ,
42+ Short : "Full scan pipeline: ping -> resolve -> nxdomain -> tunnel -> e2e (use --edns to add EDNS check) " ,
4343 Long : `Run a complete resolver scan with all checks in sequence.
4444This is the recommended way to find working resolvers for DNS tunneling.
4545
@@ -63,6 +63,7 @@ func init() {
6363 scanCmd .Flags ().Bool ("doh" , false , "scan DoH resolvers instead of UDP" )
6464 scanCmd .Flags ().Bool ("skip-ping" , false , "skip ICMP ping step" )
6565 scanCmd .Flags ().Bool ("skip-nxdomain" , false , "skip NXDOMAIN hijack check" )
66+ scanCmd .Flags ().Bool ("edns" , false , "include EDNS payload size check (filters resolvers that don't support EDNS)" )
6667 scanCmd .Flags ().Int ("top" , 10 , "number of top results to display" )
6768 rootCmd .AddCommand (scanCmd )
6869}
@@ -76,6 +77,7 @@ func runScan(cmd *cobra.Command, args []string) error {
7677 dohMode , _ := cmd .Flags ().GetBool ("doh" )
7778 skipPing , _ := cmd .Flags ().GetBool ("skip-ping" )
7879 skipNXD , _ := cmd .Flags ().GetBool ("skip-nxdomain" )
80+ ednsMode , _ := cmd .Flags ().GetBool ("edns" )
7981 topN , _ := cmd .Flags ().GetInt ("top" )
8082
8183 if outputFile == "" {
@@ -153,10 +155,12 @@ func runScan(cmd *cobra.Command, args []string) error {
153155 })
154156 }
155157 if domain != "" {
156- steps = append (steps , scanner.Step {
157- Name : "edns" , Timeout : dur ,
158- Check : scanner .EDNSCheck (domain , count ), SortBy : "edns_max" ,
159- })
158+ if ednsMode {
159+ steps = append (steps , scanner.Step {
160+ Name : "edns" , Timeout : dur ,
161+ Check : scanner .EDNSCheck (domain , count ), SortBy : "edns_max" ,
162+ })
163+ }
160164 steps = append (steps , scanner.Step {
161165 Name : "resolve/tunnel" , Timeout : dur ,
162166 Check : scanner .TunnelCheck (domain , count ), SortBy : "resolve_ms" ,
@@ -320,9 +324,11 @@ func printSummary(report scanner.ChainReport, topN int, totalTime time.Duration,
320324 switch step .Name {
321325 case "resolve/tunnel" , "doh/resolve/tunnel" :
322326 fmt .Fprintf (w , "\n %s\u26a0 Hint: resolve/tunnel had 0%% pass rate.%s\n " , colorYellow , colorReset )
323- fmt .Fprintf (w , " %sThis usually means your tunnel domain's NS delegation is not set up correctly.%s\n " , colorDim , colorReset )
324- fmt .Fprintf (w , " %sVerify with: nslookup -type=NS <your-domain> 8.8.8.8%s\n " , colorDim , colorReset )
325- fmt .Fprintf (w , " %sYou need NS + glue A records pointing to your DNSTT server.%s\n " , colorDim , colorReset )
327+ fmt .Fprintf (w , " %sPossible causes:%s\n " , colorDim , colorReset )
328+ fmt .Fprintf (w , " %s 1. NS delegation not set up: nslookup -type=NS <your-domain> 8.8.8.8%s\n " , colorDim , colorReset )
329+ fmt .Fprintf (w , " %s You need NS + glue A records pointing to your server.%s\n " , colorDim , colorReset )
330+ fmt .Fprintf (w , " %s 2. Server returns NXDOMAIN: delegation works but dnstt-server/dnstm is misconfigured.%s\n " , colorDim , colorReset )
331+ fmt .Fprintf (w , " %s Check: cat /etc/dnstm/config.json | journalctl -u dnstm-dnsrouter -n 20%s\n " , colorDim , colorReset )
326332 fmt .Fprintf (w , " %sSee: https://github.com/SamNet-dev/findns/blob/main/GUIDE.md#-تنظیم-دامنه-تانل-مهم--قبل-از-اسکن-بخوانید%s\n " , colorDim , colorReset )
327333 case "ping" :
328334 fmt .Fprintf (w , "\n %s\u26a0 Hint: ping had 0%% pass rate. Try --skip-ping (ICMP may be blocked).%s\n " , colorYellow , colorReset )
0 commit comments