ronin-app 0.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +3 -0
  3. data/.document +6 -0
  4. data/.env.dev +1 -0
  5. data/.github/workflows/ruby.yml +44 -0
  6. data/.gitignore +16 -0
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +26 -0
  9. data/.ruby-version +1 -0
  10. data/.yardopts +1 -0
  11. data/CONTRIBUTING.md +34 -0
  12. data/COPYING.txt +661 -0
  13. data/ChangeLog.md +38 -0
  14. data/Dockerfile +27 -0
  15. data/Gemfile +61 -0
  16. data/Procfile +2 -0
  17. data/Procfile.dev +2 -0
  18. data/README.md +215 -0
  19. data/Rakefile +44 -0
  20. data/app/db.rb +680 -0
  21. data/app/scanning.rb +173 -0
  22. data/app.rb +372 -0
  23. data/bin/ronin-app +34 -0
  24. data/config/database.rb +17 -0
  25. data/config/puma.rb +24 -0
  26. data/config/redis.rb +4 -0
  27. data/config/sidekiq.rb +23 -0
  28. data/config/sidekiq.yml +12 -0
  29. data/config.ru +33 -0
  30. data/docker-compose.yml +45 -0
  31. data/etc/systemd/user/ronin-app-sidekiq.1.service +17 -0
  32. data/etc/systemd/user/ronin-app-web.1.service +18 -0
  33. data/etc/systemd/user/ronin-app.target +5 -0
  34. data/gemspec.yml +55 -0
  35. data/lib/middleware/sidekiq/active_record_connection_pool.rb +47 -0
  36. data/lib/ronin/app/cli.rb +197 -0
  37. data/lib/ronin/app/helpers/html.rb +71 -0
  38. data/lib/ronin/app/root.rb +28 -0
  39. data/lib/ronin/app/schemas/params_schema.rb +66 -0
  40. data/lib/ronin/app/schemas/payloads/build_schema.rb +56 -0
  41. data/lib/ronin/app/schemas/payloads/encoders/encode_schema.rb +60 -0
  42. data/lib/ronin/app/types/import.rb +35 -0
  43. data/lib/ronin/app/types/nmap.rb +81 -0
  44. data/lib/ronin/app/types/spider.rb +49 -0
  45. data/lib/ronin/app/types/vulns.rb +69 -0
  46. data/lib/ronin/app/types.rb +66 -0
  47. data/lib/ronin/app/validations/import_params.rb +71 -0
  48. data/lib/ronin/app/validations/install_repo_params.rb +78 -0
  49. data/lib/ronin/app/validations/masscan_params.rb +122 -0
  50. data/lib/ronin/app/validations/nmap_params.rb +183 -0
  51. data/lib/ronin/app/validations/recon_params.rb +86 -0
  52. data/lib/ronin/app/validations/spider_params.rb +103 -0
  53. data/lib/ronin/app/validations/vulns_params.rb +83 -0
  54. data/lib/ronin/app/version.rb +26 -0
  55. data/log/.gitkeep +0 -0
  56. data/man/ronin-app.1 +63 -0
  57. data/man/ronin-app.1.md +61 -0
  58. data/public/images/favicon.png +0 -0
  59. data/public/images/favicon.svg +78 -0
  60. data/public/images/logo.svg +78 -0
  61. data/public/images/sidekiq.svg +24 -0
  62. data/public/javascript/app.js +60 -0
  63. data/public/javascript/notes.js +28 -0
  64. data/public/javascript/tabs.js +40 -0
  65. data/public/stylesheets/app.css +216 -0
  66. data/public/stylesheets/bulma.min.css +1 -0
  67. data/ronin-app.gemspec +63 -0
  68. data/scripts/console +7 -0
  69. data/scripts/server +134 -0
  70. data/scripts/setup +447 -0
  71. data/scripts/update +55 -0
  72. data/tmp/.gitkeep +0 -0
  73. data/views/_authors.erb +62 -0
  74. data/views/_delete.erb +4 -0
  75. data/views/_delete_all.erb +4 -0
  76. data/views/_encoding_tabs.erb +25 -0
  77. data/views/_notes.erb +33 -0
  78. data/views/_pagination.erb +1 -0
  79. data/views/_param_fields.erb +66 -0
  80. data/views/_params.erb +35 -0
  81. data/views/about.erb +30 -0
  82. data/views/db/advisories/index.erb +30 -0
  83. data/views/db/advisories/show.erb +105 -0
  84. data/views/db/asns/index.erb +19 -0
  85. data/views/db/asns/show.erb +61 -0
  86. data/views/db/credentials/index.erb +30 -0
  87. data/views/db/credentials/show.erb +51 -0
  88. data/views/db/email_addresses/index.erb +30 -0
  89. data/views/db/email_addresses/show.erb +44 -0
  90. data/views/db/host_names/index.erb +30 -0
  91. data/views/db/host_names/show.erb +52 -0
  92. data/views/db/ip_addresses/index.erb +19 -0
  93. data/views/db/ip_addresses/show.erb +98 -0
  94. data/views/db/mac_addresses/index.erb +19 -0
  95. data/views/db/mac_addresses/show.erb +62 -0
  96. data/views/db/open_ports/index.erb +19 -0
  97. data/views/db/open_ports/show.erb +87 -0
  98. data/views/db/organizations/departments/show.erb +82 -0
  99. data/views/db/organizations/index.erb +28 -0
  100. data/views/db/organizations/members/show.erb +87 -0
  101. data/views/db/organizations/show.erb +111 -0
  102. data/views/db/oses/index.erb +19 -0
  103. data/views/db/oses/show.erb +46 -0
  104. data/views/db/passwords/index.erb +30 -0
  105. data/views/db/passwords/show.erb +52 -0
  106. data/views/db/people/index.erb +31 -0
  107. data/views/db/people/show.erb +120 -0
  108. data/views/db/phone_numbers/index.erb +30 -0
  109. data/views/db/phone_numbers/show.erb +63 -0
  110. data/views/db/ports/index.erb +30 -0
  111. data/views/db/ports/show.erb +70 -0
  112. data/views/db/services/index.erb +30 -0
  113. data/views/db/services/show.erb +65 -0
  114. data/views/db/software/index.erb +19 -0
  115. data/views/db/software/show.erb +52 -0
  116. data/views/db/software_vendors/index.erb +19 -0
  117. data/views/db/software_vendors/show.erb +36 -0
  118. data/views/db/street_addresses/index.erb +19 -0
  119. data/views/db/street_addresses/show.erb +63 -0
  120. data/views/db/url_query_param_names/index.erb +19 -0
  121. data/views/db/url_query_param_names/show.erb +50 -0
  122. data/views/db/url_schemes/index.erb +19 -0
  123. data/views/db/url_schemes/show.erb +36 -0
  124. data/views/db/urls/index.erb +30 -0
  125. data/views/db/urls/show.erb +103 -0
  126. data/views/db/user_names/index.erb +30 -0
  127. data/views/db/user_names/show.erb +48 -0
  128. data/views/db/vulns/index.erb +19 -0
  129. data/views/db/vulns/show.erb +104 -0
  130. data/views/db.erb +152 -0
  131. data/views/exploits/index.erb +9 -0
  132. data/views/exploits/show.erb +100 -0
  133. data/views/import.erb +30 -0
  134. data/views/index.erb +7 -0
  135. data/views/layout.erb +98 -0
  136. data/views/masscan.erb +459 -0
  137. data/views/nmap.erb +1009 -0
  138. data/views/payloads/build.erb +19 -0
  139. data/views/payloads/encoders/encode.erb +35 -0
  140. data/views/payloads/encoders/index.erb +9 -0
  141. data/views/payloads/encoders/show.erb +47 -0
  142. data/views/payloads/index.erb +9 -0
  143. data/views/payloads/show.erb +47 -0
  144. data/views/queue.erb +28 -0
  145. data/views/recon.erb +55 -0
  146. data/views/repos/index.erb +30 -0
  147. data/views/repos/install.erb +45 -0
  148. data/views/repos/show.erb +39 -0
  149. data/views/spider.erb +372 -0
  150. data/views/vulns.erb +214 -0
  151. data/workers/import.rb +96 -0
  152. data/workers/install_repo.rb +40 -0
  153. data/workers/masscan.rb +135 -0
  154. data/workers/nmap.rb +216 -0
  155. data/workers/purge_repos.rb +40 -0
  156. data/workers/recon.rb +95 -0
  157. data/workers/remove_repo.rb +40 -0
  158. data/workers/spider.rb +148 -0
  159. data/workers/update_repo.rb +42 -0
  160. data/workers/update_repos.rb +40 -0
  161. data/workers/vulns.rb +111 -0
  162. data/workers.rb +37 -0
  163. metadata +538 -0
data/views/nmap.erb ADDED
@@ -0,0 +1,1009 @@
1
+ <script type="text/javascript" src="/javascript/tabs.js"></script>
2
+ <h1>nmap</h1>
3
+
4
+ <form action="/nmap" method="post">
5
+ <div class="field">
6
+ <label class="label is-required">Targets</label>
7
+
8
+ <div class="control">
9
+ <% if @errors && @errors[:targets] %>
10
+ <input class="input is-danger" type="text" name="targets" value="<%=hattr params[:targets] %>">
11
+
12
+ <% @errors[:targets].each do |error| %>
13
+ <p class="help is-danger"><%=h error %></p>
14
+ <% end %>
15
+ <% else %>
16
+ <input class="input" type="text" name="targets" placeholder="192.168.1.1" value="<%=hattr params[:targets] %>">
17
+ <% end %>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="field">
22
+ <label class="label">Ports</label>
23
+
24
+ <div class="control">
25
+ <% if @errors && @errors[:ports] %>
26
+ <input class="input is-danger" type="text" name="ports" value="<%=hattr params[:ports] %>">
27
+
28
+ <% @errors[:ports].each do |error| %>
29
+ <p class="help is-danger"><%=h error %></p>
30
+ <% end %>
31
+ <% else %>
32
+ <input class="input" type="text" name="ports" placeholder="22,25,80,443,8000-9000" value="<%=hattr params[:ports] %>">
33
+ <% end %>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="field">
38
+ <button type="submit" class="button is-primary">Scan</button>
39
+ </div>
40
+
41
+ <div class="tabs is-centered">
42
+ <ul>
43
+ <li class="is-active"><a data-tab-id="target">Target</a></li>
44
+ <li><a data-tab-id="host-discovery">Host Discovery</a></li>
45
+ <li><a data-tab-id="port-scanning">Port Scanning</a></li>
46
+ <li><a data-tab-id="scan-order">Scan Order</a></li>
47
+ <li><a data-tab-id="service-scan">Service Scan</a></li>
48
+ <li><a data-tab-id="os-detection">OS Detection</a></li>
49
+ <li><a data-tab-id="timing-and-performance">Timing and Performance</a></li>
50
+ <li><a data-tab-id="evasion-and-spoofing">Evasion and Spoofing</a></li>
51
+ <li><a data-tab-id="misc">Misc</a></li>
52
+ </ul>
53
+ </div>
54
+
55
+ <div class="tabs-content">
56
+ <div id="target" class="content-tab is-active">
57
+ <div class="field">
58
+ <label class="label">Target File</label>
59
+
60
+ <div class="control">
61
+ <% if @errors && @errors[:target_file] %>
62
+ <input class="input is-danger" type="text" name="target_file" value="<%=hattr params[:target_file] %>">
63
+
64
+ <% @errors[:target_file].each do |error| %>
65
+ <p class="help is-danger"><%=h error %></p>
66
+ <% end %>
67
+ <% else %>
68
+ <input class="input" type="text" name="target_file" placeholder="/path/to/file" value="<%=hattr params[:target_file] %>">
69
+ <% end %>
70
+ </div>
71
+ </div>
72
+
73
+ <div class="field">
74
+ <label class="label">Random Targets</label>
75
+
76
+ <div class="control">
77
+ <% if @errors && @errors[:random_targets] %>
78
+ <input class="input is-danger" type="number" name="random_targets" value="<%=hattr params[:random_targets] %>">
79
+
80
+ <% @errors[:random_targets].each do |error| %>
81
+ <p class="help is-danger"><%=h error %></p>
82
+ <% end %>
83
+ <% else %>
84
+ <input class="input" type="number" name="random_targets" value="<%=hattr params[:random_targets] %>">
85
+ <% end %>
86
+ </div>
87
+ </div>
88
+
89
+ <div class="field">
90
+ <label class="label">Exclude Targets</label>
91
+
92
+ <div class="control">
93
+ <% if @errors && @errors[:exclude] %>
94
+ <input class="input is-danger" type="text" name="exclude" value="<%=hattr params[:exclude] %>">
95
+
96
+ <% @errors[:exclude].each do |error| %>
97
+ <p class="help is-danger"><%=h error %></p>
98
+ <% end %>
99
+ <% else %>
100
+ <input class="input" type="text" name="exclude" placeholder="target1,target2,..." value="<%=hattr params[:exclude] %>">
101
+ <% end %>
102
+ </div>
103
+ </div>
104
+
105
+ <div class="field">
106
+ <label class="label">Exclude File</label>
107
+
108
+ <div class="control">
109
+ <% if @errors && @errors[:exclude_file] %>
110
+ <input class="input is-danger" type="text" name="exclude_file" value="<%=hattr params[:exclude_file] %>">
111
+
112
+ <% @errors[:exclude_file].each do |error| %>
113
+ <p class="help is-danger"><%=h error %></p>
114
+ <% end %>
115
+ <% else %>
116
+ <input class="input" type="text" name="exclude_file" placeholder="/path/to/file" value="<%=hattr params[:exclude_file] %>">
117
+ <% end %>
118
+ </div>
119
+ </div>
120
+ </div>
121
+
122
+ <div id="host-discovery" class="content-tab">
123
+ <div class="field">
124
+ <label class="has-text-weight-semibold">Ping Scan:</label>
125
+ <input class="checkbox" type="checkbox" name="ping"<%= " checked" if params[:ping] %>>
126
+ </div>
127
+
128
+ <div class="field">
129
+ <label class="has-text-weight-semibold">SYN Discovery:</label>
130
+ <input class="checkbox" type="checkbox" name="syn_discovery"<%= " checked" if params[:syn_discovery] %>>
131
+ </div>
132
+
133
+ <div class="field">
134
+ <label class="has-text-weight-semibold">ACK Discovery:</label>
135
+ <input class="checkbox" type="checkbox" name="ack_discovery"<%= " checked" if params[:ack_discovery] %>>
136
+ </div>
137
+
138
+ <div class="field">
139
+ <label class="has-text-weight-semibold">UDP Discovery:</label>
140
+ <input class="checkbox" type="checkbox" name="udp_discovery"<%= " checked" if params[:udp_discovery] %>>
141
+ </div>
142
+
143
+ <div class="field">
144
+ <label class="has-text-weight-semibold">SCTP Init Ping:</label>
145
+ <input class="checkbox" type="checkbox" name="sctp_init_ping"<%= " checked" if params[:sctp_init_ping] %>>
146
+ </div>
147
+
148
+ <div class="field">
149
+ <label class="has-text-weight-semibold">ICMP Echo Discovery:</label>
150
+ <input class="checkbox" type="checkbox" name="icmp_echo_discovery"<%= " checked" if params[:icmp_echo_discovery] %>>
151
+ </div>
152
+
153
+ <div class="field">
154
+ <label class="has-text-weight-semibold">ICMP Timestamp Discovery:</label>
155
+ <input class="checkbox" type="checkbox" name="icmp_timestamp_discovery"<%= " checked" if params[:icmp_timestamp_discovery] %>>
156
+ </div>
157
+
158
+ <div class="field">
159
+ <label class="has-text-weight-semibold">ICMP Netmask Discovery:</label>
160
+ <input class="checkbox" type="checkbox" name="icmp_netmask_discovery"<%= " checked" if params[:icmp_netmask_discovery] %>>
161
+ </div>
162
+
163
+ <div class="field">
164
+ <label class="has-text-weight-semibold">IP Ping:</label>
165
+ <input class="checkbox" type="checkbox" name="ip_ping"<%= " checked" if params[:ip_ping] %>>
166
+ </div>
167
+
168
+ <div class="field">
169
+ <label class="has-text-weight-semibold">ARP Ping:</label>
170
+ <input class="checkbox" type="checkbox" name="arp_ping"<%= " checked" if params[:arp_ping] %>>
171
+ </div>
172
+
173
+ <div class="field">
174
+ <label class="has-text-weight-semibold">Traceroute:</label>
175
+ <input class="checkbox" type="checkbox" name="traceroute"<%= " checked" if params[:traceroute] %>>
176
+ </div>
177
+
178
+ <div class="field">
179
+ <label class="has-text-weight-semibold">No Reverse DNS Lookup:</label>
180
+ <input class="checkbox" type="checkbox" name="disable_dns"<%= " checked" if params[:disable_dns] %>>
181
+ </div>
182
+
183
+ <div class="field">
184
+ <label class="has-text-weight-semibold">Always Reverse DNS Lookup:</label>
185
+ <input class="checkbox" type="checkbox" name="enable_dns"<%= " checked" if params[:enable_dns] %>>
186
+ </div>
187
+
188
+ <div class="field">
189
+ <label class="has-text-weight-semibold">Resolve All:</label>
190
+ <input class="checkbox" type="checkbox" name="resolve_all"<%= " checked" if params[:resolve_all] %>>
191
+ </div>
192
+
193
+ <div class="field">
194
+ <label class="has-text-weight-semibold">Unique:</label>
195
+ <input class="checkbox" type="checkbox" name="unique"<%= " checked" if params[:unique] %>>
196
+ </div>
197
+
198
+ <div class="field">
199
+ <label class="label">DNS Servers</label>
200
+
201
+ <div class="control">
202
+ <% if @errors && @errors[:dns_servers] %>
203
+ <input class="input is-danger" type="text" name="dns_servers" value="<%=hattr params[:dns_servers] %>">
204
+
205
+ <% @errors[:dns_servers].each do |error| %>
206
+ <p class="help is-danger"><%=h error %></p>
207
+ <% end %>
208
+ <% else %>
209
+ <input class="input" type="text" name="dns_servers" placeholder="nameserver1,nameserver2,..." value="<%=hattr params[:dns_servers] %>">
210
+ <% end %>
211
+ </div>
212
+ </div>
213
+
214
+ <div class="field">
215
+ <label class="has-text-weight-semibold">System DNS:</label>
216
+ <input class="checkbox" type="checkbox" name="system_dns"<%= " checked" if params[:system_dns] %>>
217
+ </div>
218
+ </div>
219
+
220
+ <div id="port-scanning" class="content-tab">
221
+ <div class="field">
222
+ <label class="has-text-weight-semibold">SYN Scan:</label>
223
+ <input class="checkbox" type="checkbox" name="syn_scan"<%= " checked" if params[:syn_scan] %>>
224
+ </div>
225
+
226
+ <div class="field">
227
+ <label class="has-text-weight-semibold">Connect Scan:</label>
228
+ <input class="checkbox" type="checkbox" name="connect_scan"<%= " checked" if params[:connect_scan] %>>
229
+ </div>
230
+
231
+ <div class="field">
232
+ <label class="has-text-weight-semibold">UDP Scan:</label>
233
+ <input class="checkbox" type="checkbox" name="udp_scan"<%= " checked" if params[:udp_scan] %>>
234
+ </div>
235
+
236
+ <div class="field">
237
+ <label class="has-text-weight-semibold">SCTP Init Scan:</label>
238
+ <input class="checkbox" type="checkbox" name="sctp_init_scan"<%= " checked" if params[:sctp_init_scan] %>>
239
+ </div>
240
+
241
+ <div class="field">
242
+ <label class="has-text-weight-semibold">NULL Scan:</label>
243
+ <input class="checkbox" type="checkbox" name="null_scan"<%= " checked" if params[:null_scan] %>>
244
+ </div>
245
+
246
+ <div class="field">
247
+ <label class="has-text-weight-semibold">FIN Scan:</label>
248
+ <input class="checkbox" type="checkbox" name="fin_scan"<%= " checked" if params[:fin_scan] %>>
249
+ </div>
250
+
251
+ <div class="field">
252
+ <label class="has-text-weight-semibold">XMAS Scan:</label>
253
+ <input class="checkbox" type="checkbox" name="xmas_scan"<%= " checked" if params[:xmas_scan] %>>
254
+ </div>
255
+
256
+ <div class="field">
257
+ <label class="has-text-weight-semibold">ACK Scan:</label>
258
+ <input class="checkbox" type="checkbox" name="ack_scan"<%= " checked" if params[:ack_scan] %>>
259
+ </div>
260
+
261
+ <div class="field">
262
+ <label class="has-text-weight-semibold">Window Scan:</label>
263
+ <input class="checkbox" type="checkbox" name="window_scan"<%= " checked" if params[:window_scan] %>>
264
+ </div>
265
+
266
+ <div class="field">
267
+ <label class="has-text-weight-semibold">Maimon Scan:</label>
268
+ <input class="checkbox" type="checkbox" name="maimon_scan"<%= " checked" if params[:maimon_scan] %>>
269
+ </div>
270
+
271
+ <h4>Scan Flags</h4>
272
+
273
+ <div class="field">
274
+ <label class="has-text-weight-semibold">SYN:</label>
275
+ <input class="checkbox" type="checkbox" name="scan_flags[syn]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:syn] %>>
276
+
277
+ <label class="has-text-weight-semibold">ACK:</label>
278
+ <input class="checkbox" type="checkbox" name="scan_flags[ack]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:ack] %>>
279
+
280
+ <label class="has-text-weight-semibold">PSH:</label>
281
+ <input class="checkbox" type="checkbox" name="scan_flags[psh]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:psh] %>>
282
+
283
+ <label class="has-text-weight-semibold">URG:</label>
284
+ <input class="checkbox" type="checkbox" name="scan_flags[urg]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:urg] %>>
285
+
286
+ <label class="has-text-weight-semibold">RST:</label>
287
+ <input class="checkbox" type="checkbox" name="scan_flags[rst]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:rst] %>>
288
+
289
+ <label class="has-text-weight-semibold">FIN:</label>
290
+ <input class="checkbox" type="checkbox" name="scan_flags[fin]"<%= " checked" if params[:scan_flags] && params[:scan_flags][:fin] %>>
291
+ </div>
292
+
293
+ <div class="field">
294
+ <label class="has-text-weight-semibold">SCTP Cookie Echo Scan:</label>
295
+ <input class="checkbox" type="checkbox" name="sctp_cookie_echo_scan"<%= " checked" if params[:sctp_cookie_echo_scan] %>>
296
+ </div>
297
+
298
+ <div class="field">
299
+ <label class="label">Idle Scan</label>
300
+
301
+ <div class="control">
302
+ <% if @errors && @errors[:idle_scan] %>
303
+ <input class="input is-danger" type="text" name="idle_scan" value="<%=hattr params[:idle_scan] %>">
304
+
305
+ <% @errors[:idle_scan].each do |error| %>
306
+ <p class="help is-danger"><%=h error %></p>
307
+ <% end %>
308
+ <% else %>
309
+ <input class="input" type="text" name="idle_scan" placeholder="HOST:PORT" value="<%=hattr params[:idle_scan] %>">
310
+ <% end %>
311
+ </div>
312
+ </div>
313
+
314
+ <div class="field">
315
+ <label class="has-text-weight-semibold">IP Scan:</label>
316
+ <input class="checkbox" type="checkbox" name="ip_scan"<%= " checked" if params[:ip_scan] %>>
317
+ </div>
318
+
319
+ <div class="field">
320
+ <label class="label">FTP Bounce Scan</label>
321
+
322
+ <div class="control">
323
+ <% if @errors && @errors[:ftp_bounce_scan] %>
324
+ <input class="input is-danger" type="text" name="ftp_bounce_scan" value="<%=hattr params[:ftp_bounce_scan] %>">
325
+
326
+ <% @errors[:ftp_bounce_scan].each do |error| %>
327
+ <p class="help is-danger"><%=h error %></p>
328
+ <% end %>
329
+ <% else %>
330
+ <input class="input" type="text" name="ftp_bounce_scan" placeholder="ftp.example.com" value="<%=hattr params[:ftp_bounce_scan] %>">
331
+ <% end %>
332
+ </div>
333
+ </div>
334
+ </div>
335
+
336
+ <div id="scan-order" class="content-tab">
337
+ <div class="field">
338
+ <label class="label">Exclude Ports</label>
339
+
340
+ <div class="control">
341
+ <% if @errors && @errors[:exclude_ports] %>
342
+ <input class="input is-danger" type="text" name="exclude_ports" value="<%=hattr params[:exclude_ports] %>">
343
+
344
+ <% @errors[:exclude_ports].each do |error| %>
345
+ <p class="help is-danger"><%=h error %></p>
346
+ <% end %>
347
+ <% else %>
348
+ <input class="input" type="text" name="exclude_ports" placeholder="port1,port2,..." value="<%=hattr params[:exclude_ports] %>">
349
+ <% end %>
350
+ </div>
351
+ </div>
352
+
353
+ <div class="field">
354
+ <label class="has-text-weight-semibold">Fast mode:</label>
355
+ <input class="checkbox" type="checkbox" name="fast"<%= " checked" if params[:fast] %>>
356
+ </div>
357
+
358
+ <div class="field">
359
+ <label class="has-text-weight-semibold">Consecutively:</label>
360
+ <input class="checkbox" type="checkbox" name="consecutively"<%= " checked" if params[:consecutively] %>>
361
+ </div>
362
+
363
+ <div class="field">
364
+ <label class="label">Top Ports</label>
365
+
366
+ <div class="control">
367
+ <% if @errors && @errors[:top_ports] %>
368
+ <input class="input is-danger" type="number" name="top_ports" value="<%=hattr params[:top_ports] %>">
369
+
370
+ <% @errors[:top_ports].each do |error| %>
371
+ <p class="help is-danger"><%=h error %></p>
372
+ <% end %>
373
+ <% else %>
374
+ <input class="input" type="number" name="top_ports" value="<%=hattr params[:top_ports] %>">
375
+ <% end %>
376
+ </div>
377
+ </div>
378
+
379
+ <div class="field">
380
+ <label class="label">Port Ratio</label>
381
+
382
+ <div class="control">
383
+ <% if @errors && @errors[:port_ratio] %>
384
+ <input class="input is-danger" type="text" name="port_ratio" value="<%=hattr params[:port_ratio] %>">
385
+
386
+ <% @errors[:port_ratio].each do |error| %>
387
+ <p class="help is-danger"><%=h error %></p>
388
+ <% end %>
389
+ <% else %>
390
+ <input class="input" type="text" name="port_ratio" placeholder="0.0 - 1.0" value="<%=hattr params[:port_ratio] %>">
391
+ <% end %>
392
+ </div>
393
+ </div>
394
+ </div>
395
+
396
+ <div id="service-scan" class="content-tab">
397
+ <div class="field">
398
+ <label class="has-text-weight-semibold">Service Scan:</label>
399
+ <input class="checkbox" type="checkbox" name="service_scan"<%= " checked" if params[:service_scan] %>>
400
+ </div>
401
+
402
+ <div class="field">
403
+ <label class="has-text-weight-semibold">All Ports:</label>
404
+ <input class="checkbox" type="checkbox" name="all_ports"<%= " checked" if params[:all_ports] %>>
405
+ </div>
406
+
407
+ <div class="field">
408
+ <label class="has-text-weight-semibold">Version Intensity</label>
409
+ <select name="nsock_engine ">
410
+ <option<%= " selected" unless params[:version_intensity] %>></option>
411
+ <% (0..9).each do |level| %>
412
+ <option value="<%= level %>"<%= " selected" if params[:version_intensity] == level.to_s %>><%= level %></option>
413
+ <% end %>
414
+ </select>
415
+ </div>
416
+
417
+ <div class="field">
418
+ <label class="has-text-weight-semibold">Light Version Scan:</label>
419
+ <input class="checkbox" type="checkbox" name="version_light"<%= " checked" if params[:version_light] %>>
420
+ </div>
421
+
422
+ <div class="field">
423
+ <label class="has-text-weight-semibold">All Version Scan:</label>
424
+ <input class="checkbox" type="checkbox" name="version_all"<%= " checked" if params[:version_all] %>>
425
+ </div>
426
+
427
+ <div class="field">
428
+ <label class="has-text-weight-semibold">Version Scan Trace:</label>
429
+ <input class="checkbox" type="checkbox" name="version_trace"<%= " checked" if params[:version_trace] %>>
430
+ </div>
431
+ </div>
432
+
433
+ <div id="os-detection" class="content-tab">
434
+ <div class="field">
435
+ <label class="has-text-weight-semibold">OS Fingerprint:</label>
436
+ <input class="checkbox" type="checkbox" name="os_fingerprint"<%= " checked" if params[:os_fingerprint] %>>
437
+ </div>
438
+
439
+ <div class="field">
440
+ <label class="has-text-weight-semibold">Limit OS Scan:</label>
441
+ <input class="checkbox" type="checkbox" name="limit_os_scan"<%= " checked" if params[:limit_os_scan] %>>
442
+ </div>
443
+
444
+ <div class="field">
445
+ <label class="has-text-weight-semibold">Max OS Scan:</label>
446
+ <input class="checkbox" type="checkbox" name="max_os_scan"<%= " checked" if params[:max_os_scan] %>>
447
+ </div>
448
+
449
+ <div class="field">
450
+ <label class="has-text-weight-semibold">Max OS Scan:</label>
451
+ <input class="checkbox" type="checkbox" name="max_os_scan"<%= " checked" if params[:max_os_scan] %>>
452
+ </div>
453
+
454
+ <div class="field">
455
+ <label class="has-text-weight-semibold">Max OS Tries:</label>
456
+ <input class="checkbox" type="checkbox" name="max_os_tries"<%= " checked" if params[:max_os_tries] %>>
457
+ </div>
458
+ </div>
459
+
460
+ <div id="timing-and-performance" class="content-tab">
461
+ <div class="field">
462
+ <label class="label">Minimum Host Group:</label>
463
+
464
+ <div class="control">
465
+ <% if @errors && @errors[:min_host_group] %>
466
+ <input class="input is-danger" type="number" name="min_host_group" value="<%=hattr params[:min_host_group] %>">
467
+
468
+ <% @errors[:min_host_group].each do |error| %>
469
+ <p class="help is-danger"><%=h error %></p>
470
+ <% end %>
471
+ <% else %>
472
+ <input class="input" type="number" name="min_host_group" value="<%=hattr params[:min_host_group] %>">
473
+ <% end %>
474
+ </div>
475
+ </div>
476
+
477
+ <div class="field">
478
+ <label class="label">Maximum Host Group:</label>
479
+
480
+ <div class="control">
481
+ <% if @errors && @errors[:max_host_group] %>
482
+ <input class="input is-danger" type="number" name="max_host_group" value="<%=hattr params[:max_host_group] %>">
483
+
484
+ <% @errors[:max_host_group].each do |error| %>
485
+ <p class="help is-danger"><%=h error %></p>
486
+ <% end %>
487
+ <% else %>
488
+ <input class="input" type="number" name="max_host_group" value="<%=hattr params[:max_host_group] %>">
489
+ <% end %>
490
+ </div>
491
+ </div>
492
+
493
+ <div class="field">
494
+ <label class="label">Minimum Parallelism:</label>
495
+
496
+ <div class="control">
497
+ <% if @errors && @errors[:min_parallelism] %>
498
+ <input class="input is-danger" type="number" name="min_parallelism" value="<%=hattr params[:min_parallelism] %>">
499
+
500
+ <% @errors[:min_parallelism].each do |error| %>
501
+ <p class="help is-danger"><%=h error %></p>
502
+ <% end %>
503
+ <% else %>
504
+ <input class="input" type="number" name="min_parallelism" value="<%=hattr params[:min_parallelism] %>">
505
+ <% end %>
506
+ </div>
507
+ </div>
508
+
509
+ <div class="field">
510
+ <label class="label">Maximum Parallelism:</label>
511
+
512
+ <div class="control">
513
+ <% if @errors && @errors[:max_parallelism] %>
514
+ <input class="input is-danger" type="number" name="max_parallelism" value="<%=hattr params[:max_parallelism] %>">
515
+
516
+ <% @errors[:max_parallelism].each do |error| %>
517
+ <p class="help is-danger"><%=h error %></p>
518
+ <% end %>
519
+ <% else %>
520
+ <input class="input" type="number" name="max_parallelism" value="<%=hattr params[:max_parallelism] %>">
521
+ <% end %>
522
+ </div>
523
+ </div>
524
+
525
+ <div class="field">
526
+ <label class="label">Minimum RTT Timeout:</label>
527
+
528
+ <div class="control">
529
+ <% if @errors && @errors[:min_rtt_timeout] %>
530
+ <input class="input is-danger" type="text" name="min_rtt_timeout" value="<%=hattr params[:min_rtt_timeout] %>">
531
+
532
+ <% @errors[:min_rtt_timeout].each do |error| %>
533
+ <p class="help is-danger"><%=h error %></p>
534
+ <% end %>
535
+ <% else %>
536
+ <input class="input" type="text" name="min_rtt_timeout" placeholder="100ms" value="<%=hattr params[:min_rtt_timeout] %>">
537
+ <% end %>
538
+ </div>
539
+ </div>
540
+
541
+ <div class="field">
542
+ <label class="label">Maximum RTT Timeout:</label>
543
+
544
+ <div class="control">
545
+ <% if @errors && @errors[:max_rtt_timeout] %>
546
+ <input class="input is-danger" type="text" name="max_rtt_timeout" value="<%=hattr params[:max_rtt_timeout] %>">
547
+
548
+ <% @errors[:max_rtt_timeout].each do |error| %>
549
+ <p class="help is-danger"><%=h error %></p>
550
+ <% end %>
551
+ <% else %>
552
+ <input class="input" type="text" name="max_rtt_timeout" placeholder="100ms" value="<%=hattr params[:max_rtt_timeout] %>">
553
+ <% end %>
554
+ </div>
555
+ </div>
556
+
557
+ <div class="field">
558
+ <label class="label">Initial RTT Timeout:</label>
559
+
560
+ <div class="control">
561
+ <% if @errors && @errors[:initial_rtt_timeout] %>
562
+ <input class="input is-danger" type="text" name="initial_rtt_timeout" value="<%=hattr params[:initial_rtt_timeout] %>">
563
+
564
+ <% @errors[:initial_rtt_timeout].each do |error| %>
565
+ <p class="help is-danger"><%=h error %></p>
566
+ <% end %>
567
+ <% else %>
568
+ <input class="input" type="text" name="initial_rtt_timeout" placeholder="100ms" value="<%=hattr params[:initial_rtt_timeout] %>">
569
+ <% end %>
570
+ </div>
571
+ </div>
572
+
573
+ <div class="field">
574
+ <label class="label">Max Retries:</label>
575
+
576
+ <div class="control">
577
+ <% if @errors && @errors[:max_retries] %>
578
+ <input class="input is-danger" type="number" name="max_retries" value="<%=hattr params[:max_retries] %>">
579
+
580
+ <% @errors[:max_retries].each do |error| %>
581
+ <p class="help is-danger"><%=h error %></p>
582
+ <% end %>
583
+ <% else %>
584
+ <input class="input" type="number" name="max_retries" value="<%=hattr params[:max_retries] %>">
585
+ <% end %>
586
+ </div>
587
+ </div>
588
+
589
+ <div class="field">
590
+ <label class="label">Host Timeout:</label>
591
+
592
+ <div class="control">
593
+ <% if @errors && @errors[:host_timeout] %>
594
+ <input class="input is-danger" type="text" name="host_timeout" value="<%=hattr params[:host_timeout] %>">
595
+
596
+ <% @errors[:host_timeout].each do |error| %>
597
+ <p class="help is-danger"><%=h error %></p>
598
+ <% end %>
599
+ <% else %>
600
+ <input class="input" type="text" name="host_timeout" placeholder="10s" value="<%=hattr params[:host_timeout] %>">
601
+ <% end %>
602
+ </div>
603
+ </div>
604
+
605
+ <div class="field">
606
+ <label class="label">Script Timeout:</label>
607
+
608
+ <div class="control">
609
+ <% if @errors && @errors[:script_timeout] %>
610
+ <input class="input is-danger" type="text" name="script_timeout" value="<%=hattr params[:script_timeout] %>">
611
+
612
+ <% @errors[:script_timeout].each do |error| %>
613
+ <p class="help is-danger"><%=h error %></p>
614
+ <% end %>
615
+ <% else %>
616
+ <input class="input" type="text" name="script_timeout" placeholder="10s" value="<%=hattr params[:script_timeout] %>">
617
+ <% end %>
618
+ </div>
619
+ </div>
620
+
621
+ <div class="field">
622
+ <label class="label">Scan Delay:</label>
623
+
624
+ <div class="control">
625
+ <% if @errors && @errors[:scan_delay] %>
626
+ <input class="input is-danger" type="text" name="scan_delay" value="<%=hattr params[:scan_delay] %>">
627
+
628
+ <% @errors[:scan_delay].each do |error| %>
629
+ <p class="help is-danger"><%=h error %></p>
630
+ <% end %>
631
+ <% else %>
632
+ <input class="input" type="text" name="scan_delay" placeholder="1s" value="<%=hattr params[:scan_delay] %>">
633
+ <% end %>
634
+ </div>
635
+ </div>
636
+
637
+ <div class="field">
638
+ <label class="label">Maximum Scan Delay:</label>
639
+
640
+ <div class="control">
641
+ <% if @errors && @errors[:max_scan_delay] %>
642
+ <input class="input is-danger" type="text" name="max_scan_delay" value="<%=hattr params[:max_scan_delay] %>">
643
+
644
+ <% @errors[:max_scan_delay].each do |error| %>
645
+ <p class="help is-danger"><%=h error %></p>
646
+ <% end %>
647
+ <% else %>
648
+ <input class="input" type="text" name="max_scan_delay" placeholder="10s" value="<%=hattr params[:max_scan_delay] %>">
649
+ <% end %>
650
+ </div>
651
+ </div>
652
+
653
+ <div class="field">
654
+ <label class="label">Minimum Rate:</label>
655
+
656
+ <div class="control">
657
+ <% if @errors && @errors[:min_rate] %>
658
+ <input class="input is-danger" type="number" name="min_rate" value="<%=hattr params[:min_rate] %>">
659
+
660
+ <% @errors[:min_rate].each do |error| %>
661
+ <p class="help is-danger"><%=h error %></p>
662
+ <% end %>
663
+ <% else %>
664
+ <input class="input" type="number" name="min_rate" value="<%=hattr params[:min_rate] %>">
665
+ <% end %>
666
+ </div>
667
+ </div>
668
+
669
+ <div class="field">
670
+ <label class="label">Maximum Rate:</label>
671
+
672
+ <div class="control">
673
+ <% if @errors && @errors[:max_rate] %>
674
+ <input class="input is-danger" type="number" name="max_rate" value="<%=hattr params[:max_rate] %>">
675
+
676
+ <% @errors[:max_rate].each do |error| %>
677
+ <p class="help is-danger"><%=h error %></p>
678
+ <% end %>
679
+ <% else %>
680
+ <input class="input" type="number" name="max_rate" value="<%=hattr params[:max_rate] %>">
681
+ <% end %>
682
+ </div>
683
+ </div>
684
+
685
+ <div class="field">
686
+ <label class="has-text-weight-semibold">Defeat RST Ratelimit:</label>
687
+ <input class="checkbox" type="checkbox" name="defeat_rst_ratelimit"<%= " checked" if params[:defeat_rst_ratelimit] %>>
688
+ </div>
689
+
690
+ <div class="field">
691
+ <label class="has-text-weight-semibold">Defeat ICMP Ratelimit:</label>
692
+ <input class="checkbox" type="checkbox" name="defeat_icmp_ratelimit"<%= " checked" if params[:defeat_icmp_ratelimit] %>>
693
+ </div>
694
+
695
+ <div class="field">
696
+ <label class="has-text-weight-semibold">NSock Engine:</label>
697
+ <select name="nsock_engine">
698
+ <option<%= " selected" unless params[:nsock_engine] %>></option>
699
+ <option value="iocp"<%= " selected" if params[:nsock_engine] == 'iocp' %>>iocp</option>
700
+ <option value="epoll"<%= " selected" if params[:nsock_engine] == 'epoll' %>>epoll</option>
701
+ <option value="kqueue"<%= " selected" if params[:nsock_engine] == 'kqueue' %>>kqueue</option>
702
+ <option value="poll"<%= " selected" if params[:nsock_engine] == 'poll' %>>poll</option>
703
+ <option value="select"<%= " selected" if params[:nsock_engine] == 'select' %>>select</option>
704
+ </select>
705
+ </div>
706
+
707
+ <div class="field">
708
+ <label class="has-text-weight-semibold">Timing Template:</label>
709
+ <select name="timing_template">
710
+ <option<%= " selected" unless params[:timing_template] %>></option>
711
+ <option value="paranoid"<%= " selected" if params[:timing_template] == 'paranoid' %>>paranoid</option>
712
+ <option value="sneaky"<%= " selected" if params[:timing_template] == 'sneaky' %>>sneaky</option>
713
+ <option value="polite"<%= " selected" if params[:timing_template] == 'polite' %>>polite</option>
714
+ <option value="normal"<%= " selected" if params[:timing_template] == 'normal' %>>normal</option>
715
+ <option value="aggressive"<%= " selected" if params[:timing_template] == 'aggressive' %>>aggressive</option>
716
+ <option value="insane"<%= " selected" if params[:timing_template] == 'insane' %>>insane</option>
717
+ </select>
718
+ </div>
719
+ </div>
720
+
721
+ <div id="evasion-and-spoofing" class="content-tab">
722
+ <div class="field">
723
+ <label class="has-text-weight-semibold">Packet Fragments:</label>
724
+ <input class="checkbox" type="checkbox" name="packet_fragments"<%= " checked" if params[:packet_fragments] %>>
725
+ </div>
726
+
727
+ <div class="field">
728
+ <label class="has-text-weight-semibold">MTU:</label>
729
+ <input class="checkbox" type="checkbox" name="mtu"<%= " checked" if params[:mtu] %>>
730
+ </div>
731
+
732
+ <div class="field">
733
+ <label class="label">Decoys:</label>
734
+
735
+ <div class="control">
736
+ <% if @errors && @errors[:decoys] %>
737
+ <input class="input is-danger" type="text" name="decoys" value="<%=hattr params[:decoys] %>">
738
+
739
+ <% @errors[:decoys].each do |error| %>
740
+ <p class="help is-danger"><%=h error %></p>
741
+ <% end %>
742
+ <% else %>
743
+ <input class="input" type="text" name="decoys" placeholder="decoy1,decoy2,..." value="<%=hattr params[:decoys] %>">
744
+ <% end %>
745
+ </div>
746
+ </div>
747
+
748
+ <div class="field">
749
+ <label class="label">Spoof Source Address:</label>
750
+
751
+ <div class="control">
752
+ <% if @errors && @errors[:spoof] %>
753
+ <input class="input is-danger" type="text" name="spoof" value="<%=hattr params[:spoof] %>">
754
+
755
+ <% @errors[:spoof].each do |error| %>
756
+ <p class="help is-danger"><%=h error %></p>
757
+ <% end %>
758
+ <% else %>
759
+ <input class="input" type="text" name="spoof" placeholder="IP" value="<%=hattr params[:spoof] %>">
760
+ <% end %>
761
+ </div>
762
+ </div>
763
+
764
+ <div class="field">
765
+ <label class="label">Network Interface:</label>
766
+
767
+ <div class="control">
768
+ <% if @errors && @errors[:interface] %>
769
+ <input class="input is-danger" type="text" name="interface" value="<%=hattr params[:interface] %>">
770
+
771
+ <% @errors[:interface].each do |error| %>
772
+ <p class="help is-danger"><%=h error %></p>
773
+ <% end %>
774
+ <% else %>
775
+ <input class="input" type="text" name="interface" placeholder="enp1s0" value="<%=hattr params[:interface] %>">
776
+ <% end %>
777
+ </div>
778
+ </div>
779
+
780
+ <div class="field">
781
+ <label class="label">Source Port:</label>
782
+
783
+ <div class="control">
784
+ <% if @errors && @errors[:source_port] %>
785
+ <input class="input is-danger" type="text" name="source_port" value="<%=hattr params[:source_port] %>">
786
+
787
+ <% @errors[:source_port].each do |error| %>
788
+ <p class="help is-danger"><%=h error %></p>
789
+ <% end %>
790
+ <% else %>
791
+ <input class="input" type="text" name="source_port" placeholder="1024" value="<%=hattr params[:source_port] %>">
792
+ <% end %>
793
+ </div>
794
+ </div>
795
+
796
+ <div class="field">
797
+ <label class="label">Proxies:</label>
798
+
799
+ <div class="control">
800
+ <% if @errors && @errors[:proxies] %>
801
+ <input class="input is-danger" type="text" name="proxies" value="<%=hattr params[:proxies] %>">
802
+
803
+ <% @errors[:proxies].each do |error| %>
804
+ <p class="help is-danger"><%=h error %></p>
805
+ <% end %>
806
+ <% else %>
807
+ <input class="input" type="text" name="proxies" placeholder="http://proxy.com/" value="<%=hattr params[:proxies] %>">
808
+ <% end %>
809
+ </div>
810
+ </div>
811
+
812
+ <div class="field">
813
+ <label class="label">Data:</label>
814
+
815
+ <div class="control">
816
+ <% if @errors && @errors[:data] %>
817
+ <input class="input is-danger" type="text" name="data" value="<%=hattr params[:data] %>">
818
+
819
+ <% @errors[:data].each do |error| %>
820
+ <p class="help is-danger"><%=h error %></p>
821
+ <% end %>
822
+ <% else %>
823
+ <input class="input" type="text" name="data" placeholder="0x1234567890ABCDEF" value="<%=hattr params[:data] %>">
824
+ <% end %>
825
+ </div>
826
+ </div>
827
+
828
+ <div class="field">
829
+ <label class="label">Data String:</label>
830
+
831
+ <div class="control">
832
+ <% if @errors && @errors[:data_string] %>
833
+ <input class="input is-danger" type="text" name="data_string" value="<%=hattr params[:data_string] %>">
834
+
835
+ <% @errors[:data_string].each do |error| %>
836
+ <p class="help is-danger"><%=h error %></p>
837
+ <% end %>
838
+ <% else %>
839
+ <input class="input" type="text" name="data_string" placeholder="Hack the planet!" value="<%=hattr params[:data_string] %>">
840
+ <% end %>
841
+ </div>
842
+ </div>
843
+
844
+ <div class="field">
845
+ <label class="label">Data Length:</label>
846
+
847
+ <div class="control">
848
+ <% if @errors && @errors[:data_length] %>
849
+ <input class="input is-danger" type="text" name="data_length" value="<%=hattr params[:data_length] %>">
850
+
851
+ <% @errors[:data_length].each do |error| %>
852
+ <p class="help is-danger"><%=h error %></p>
853
+ <% end %>
854
+ <% else %>
855
+ <input class="input" type="text" name="data_length" placeholder="NUM" value="<%=hattr params[:data_length] %>">
856
+ <% end %>
857
+ </div>
858
+ </div>
859
+
860
+ <div class="field">
861
+ <label class="label">IP Options:</label>
862
+
863
+ <div class="control">
864
+ <% if @errors && @errors[:ip_options] %>
865
+ <input class="input is-danger" type="text" name="ip_options" value="<%=hattr params[:ip_options] %>">
866
+
867
+ <% @errors[:ip_options].each do |error| %>
868
+ <p class="help is-danger"><%=h error %></p>
869
+ <% end %>
870
+ <% else %>
871
+ <input class="input" type="text" name="ip_options" placeholder="IP options" value="<%=hattr params[:ip_options] %>">
872
+ <% end %>
873
+ </div>
874
+ </div>
875
+
876
+ <div class="field">
877
+ <label class="label">TTL:</label>
878
+
879
+ <div class="control">
880
+ <% if @errors && @errors[:ttl] %>
881
+ <input class="input is-danger" type="number" name="ttl" value="<%=hattr params[:ttl] %>">
882
+
883
+ <% @errors[:ttl].each do |error| %>
884
+ <p class="help is-danger"><%=h error %></p>
885
+ <% end %>
886
+ <% else %>
887
+ <input class="input" type="number" name="ttl" placeholder="NUM" value="<%=hattr params[:ttl] %>">
888
+ <% end %>
889
+ </div>
890
+ </div>
891
+
892
+ <div class="field">
893
+ <label class="has-text-weight-semibold">Randomize Hosts:</label>
894
+ <input class="checkbox" type="checkbox" name="randomize_hosts"<%= " checked" if params[:randomize_hosts] %>>
895
+ </div>
896
+
897
+ <div class="field">
898
+ <label class="label">Spoof MAC Address:</label>
899
+
900
+ <div class="control">
901
+ <% if @errors && @errors[:spoof_mac] %>
902
+ <input class="input is-danger" type="text" name="spoof_mac" value="<%=hattr params[:spoof_mac] %>">
903
+
904
+ <% @errors[:spoof_mac].each do |error| %>
905
+ <p class="help is-danger"><%=h error %></p>
906
+ <% end %>
907
+ <% else %>
908
+ <input class="input" type="text" name="spoof_mac" placeholder="MAC address" value="<%=hattr params[:spoof_mac] %>">
909
+ <% end %>
910
+ </div>
911
+ </div>
912
+
913
+ <div class="field">
914
+ <label class="has-text-weight-semibold">Bad Checksum:</label>
915
+ <input class="checkbox" type="checkbox" name="bad_checksum"<%= " checked" if params[:bad_checksum] %>>
916
+ </div>
917
+
918
+ <div class="field">
919
+ <label class="has-text-weight-semibold">SCTP Adler32:</label>
920
+ <input class="checkbox" type="checkbox" name="sctp_adler32"<%= " checked" if params[:sctp_adler32] %>>
921
+ </div>
922
+ </div>
923
+
924
+ <div id="misc" class="content-tab">
925
+ <div class="field">
926
+ <label class="has-text-weight-semibold">IPv6 Scanning:</label>
927
+ <input class="checkbox" type="checkbox" name="ipv6"<%= " checked" if params[:ipv6] %>>
928
+ </div>
929
+
930
+ <div class="field">
931
+ <label class="has-text-weight-semibold">Enable Everything:</label>
932
+ <input class="checkbox" type="checkbox" name="all"<%= " checked" if params[:all] %>>
933
+ </div>
934
+
935
+ <div class="field">
936
+ <label class="label">Nmap Data Directory:</label>
937
+
938
+ <div class="control">
939
+ <% if @errors && @errors[:nmap_datadir] %>
940
+ <input class="input is-danger" type="text" name="nmap_datadir" value="<%=hattr params[:nmap_datadir] %>">
941
+
942
+ <% @errors[:nmap_datadir].each do |error| %>
943
+ <p class="help is-danger"><%=h error %></p>
944
+ <% end %>
945
+ <% else %>
946
+ <input class="input" type="text" name="nmap_datadir" placeholder="/path/to/dir" value="<%=hattr params[:nmap_datadir] %>">
947
+ <% end %>
948
+ </div>
949
+ </div>
950
+
951
+ <div class="field">
952
+ <label class="label">Service DB File:</label>
953
+
954
+ <div class="control">
955
+ <% if @errors && @errors[:servicedb] %>
956
+ <input class="input is-danger" type="text" name="servicedb" value="<%=hattr params[:servicedb] %>">
957
+
958
+ <% @errors[:servicedb].each do |error| %>
959
+ <p class="help is-danger"><%=h error %></p>
960
+ <% end %>
961
+ <% else %>
962
+ <input class="input" type="text" name="servicedb" placeholder="/path/to/file" value="<%=hattr params[:servicedb] %>">
963
+ <% end %>
964
+ </div>
965
+ </div>
966
+
967
+ <div class="field">
968
+ <label class="label">Version DB File:</label>
969
+
970
+ <div class="control">
971
+ <% if @errors && @errors[:versiondb] %>
972
+ <input class="input is-danger" type="text" name="versiondb" value="<%=hattr params[:versiondb] %>">
973
+
974
+ <% @errors[:versiondb].each do |error| %>
975
+ <p class="help is-danger"><%=h error %></p>
976
+ <% end %>
977
+ <% else %>
978
+ <input class="input" type="text" name="versiondb" placeholder="/path/to/file" value="<%=hattr params[:versiondb] %>">
979
+ <% end %>
980
+ </div>
981
+ </div>
982
+
983
+ <div class="field">
984
+ <label class="has-text-weight-semibold">Send Raw Ethernet Packets:</label>
985
+ <input class="checkbox" type="checkbox" name="send_eth"<%= " checked" if params[:send_eth] %>>
986
+ </div>
987
+
988
+ <div class="field">
989
+ <label class="has-text-weight-semibold">Send Raw IP Packets:</label>
990
+ <input class="checkbox" type="checkbox" name="send_ip"<%= " checked" if params[:send_ip] %>>
991
+ </div>
992
+
993
+ <div class="field">
994
+ <label class="has-text-weight-semibold">Privileged Mode:</label>
995
+ <input class="checkbox" type="checkbox" name="privileged"<%= " checked" if params[:privileged] %>>
996
+ </div>
997
+
998
+ <div class="field">
999
+ <label class="has-text-weight-semibold">Unprivileged Mode:</label>
1000
+ <input class="checkbox" type="checkbox" name="unprivileged"<%= " checked" if params[:unprivileged] %>>
1001
+ </div>
1002
+
1003
+ <div class="field">
1004
+ <label class="has-text-weight-semibold">Release Memory:</label>
1005
+ <input class="checkbox" type="checkbox" name="release_memory"<%= " checked" if params[:release_memory] %>>
1006
+ </div>
1007
+ </div>
1008
+ </div>
1009
+ </form>