diff --git a/scripts/ifs_data.py b/scripts/ifs_data.py
new file mode 100644
index 0000000..1b6143f
--- /dev/null
+++ b/scripts/ifs_data.py
@@ -0,0 +1,81 @@
+import re
+import sys
+import subprocess
+import json
+
+
+def shell(command):
+    _ps = subprocess.Popen(
+        command.split(),
+        stdout=subprocess.PIPE
+    ).communicate()[0].decode()
+
+    return _ps
+
+
+def cut_option(_param, _options_list):
+    _option = "n/a"
+    _result_list = []
+    if _param in _options_list:
+        _index = _options_list.index(_param)
+        _option = _options_list[_index+1]
+        _l1 = _options_list[:_index]
+        _l2 = _options_list[_index+2:]
+        _result_list = _l1 + _l2
+    else:
+        _result_list = _options_list
+    return _option, _result_list
+
+
+def get_ifs_data():
+    _ifs_raw = shell('ip a')
+
+    if_start = re.compile("^[0-9]+: .*: \<.*\> .*$")
+    if_ipv4 = re.compile("^\s{4}inet\ .*$")
+
+    _ifs = {}
+    _if_name = None
+    for line in _ifs_raw.splitlines():
+        _if_data = {}
+        if if_start.match(line):
+            _tmp = line.split(':')
+            _if_name = _tmp[1].strip()
+            _if_options = _tmp[2].strip().split(' ')
+            _if_data['order'] = _tmp[0]
+            _if_data['mtu'], _if_options = cut_option("mtu", _if_options)
+            _if_data['qlen'], _if_options = cut_option("qlen", _if_options)
+            _if_data['state'], _if_options = cut_option("state", _if_options)
+            _if_data['other'] = _if_options
+            _if_data['ipv4'] = {}
+            _ifs[_if_name] = _if_data
+        elif if_ipv4.match(line):
+            if _if_name is None:
+                continue
+            else:
+                _tmp = line.strip().split(' ', 2)
+                _ip = _tmp[1]
+                _options = _tmp[2].split(' ')
+                _brd, _options = cut_option("brd", _options)
+                # TODO: Parse other options, mask, brd, etc...
+                _ifs[_if_name]['ipv4'][_ip] = {}
+                _ifs[_if_name]['ipv4'][_ip]['brd'] = _brd
+                _ifs[_if_name]['ipv4'][_ip]['other'] = _options
+
+    return _ifs
+
+
+ifs_data = get_ifs_data()
+
+# _ifs = sorted(ifs_data.keys())
+# _ifs.remove("lo")
+# for _idx in range(len(_ifs)):
+#     print("{}: {}, {}, {}".format(
+#         _ifs[_idx],
+#         " ".join(ifs_data[_ifs[_idx]]['ipv4'].keys()),
+#         ifs_data[_ifs[_idx]]['mtu'],
+#         ifs_data[_ifs[_idx]]['state']
+#     ))
+
+
+buff = json.dumps(ifs_data)
+sys.stdout.write(buff)
