Skip to content

Commit fdf8876

Browse files
committed
Added String#defang (closes #549).
1 parent dedbdab commit fdf8876

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

lib/ronin/support/network/defang.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ module Network
2727
#
2828
# ## Core-Ext Methods
2929
#
30+
# * {String#defang}
3031
# * {String#refang}
3132
# * {IPAddr#defang}
3233
# * {URI::HTTP#defang}

lib/ronin/support/network/defang/core_ext/string.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,27 @@
2020

2121
class String
2222

23+
#
24+
# Defangs a URL, IP address, or host name.
25+
#
26+
# @param [String] string
27+
# The URL, IP address, or host name.
28+
#
29+
# @return [String]
30+
# The defanged URL, IP address, or host name.
31+
#
32+
# @example
33+
# "https://www.example.com:8080/foo?q=1".defang
34+
# # => "hxxps[://]www[.]example[.]com[:]8080/foo?q=1"
35+
# "192.168.1.1".defang
36+
# # => "192[.]168[.]1[.]1"
37+
# "www.example.com".defang
38+
# # => "www[.]example[.]com"
39+
#
40+
def defang
41+
Ronin::Support::Network::Defang.defang(self)
42+
end
43+
2344
#
2445
# Refangs a defanged URL, IP address, or host name.
2546
#

spec/network/defang/core_ext/string_spec.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,48 @@
22
require 'ronin/support/network/defang/core_ext/string'
33

44
describe String do
5+
describe "#defang" do
6+
context "when given a defanged URL" do
7+
subject { 'http://www.example.com/foo?q=1' }
8+
9+
let(:defanged) { 'hxxp[://]www[.]example[.]com/foo?q=1' }
10+
11+
it "must return the defanged URL" do
12+
expect(subject.defang).to eq(defanged)
13+
end
14+
end
15+
16+
context "when given a defanged IPv4 address" do
17+
subject { '192.168.1.1' }
18+
19+
let(:defanged) { '192[.]168[.]1[.]1' }
20+
21+
it "must return the defanged IPv4 address" do
22+
expect(subject.defang).to eq(defanged)
23+
end
24+
end
25+
26+
context "when given a defanged IPv6 address" do
27+
subject { '2606:2800:21f:cb07:6820:80da:af6b:8b2c' }
28+
29+
let(:defanged) { '2606[:]2800[:]21f[:]cb07[:]6820[:]80da[:]af6b[:]8b2c' }
30+
31+
it "must return the defanged IPv6 address" do
32+
expect(subject.defang).to eq(defanged)
33+
end
34+
end
35+
36+
context "when given a defanged host name" do
37+
subject { 'www.example.com' }
38+
39+
let(:defanged) { 'www[.]example[.]com' }
40+
41+
it "must return the defanged host name" do
42+
expect(subject.defang).to eq(defanged)
43+
end
44+
end
45+
end
46+
547
describe "#refang" do
648
context "when the String is a defanged URL" do
749
subject { 'hxxp[://]www[.]example[.]com/foo?q=1' }

0 commit comments

Comments
 (0)