Match luketainton/template
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
# template
|
# 6to4_converter
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
Simple script to convert IPv4 addresses to 6to4 addresses. See RFC 3056 for details.
|
||||||
|
|
||||||
## How to install
|
## How to install
|
||||||
|
- Clone the repository.
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
- Run `python3 app/main.py --help` for information on how to use this script.
|
||||||
|
|||||||
58
app/main.py
58
app/main.py
@@ -1,8 +1,54 @@
|
|||||||
#!/usr/local/bin/python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
def main():
|
"""Get 6to4 address from IPv4 address."""
|
||||||
# Commands here
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
import argparse
|
||||||
main()
|
|
||||||
|
|
||||||
|
def parse_args(): # pragma: no cover
|
||||||
|
parser = argparse.ArgumentParser(description='Get 6to4 address from IPv4 address.')
|
||||||
|
parser.add_argument('-a', '--address', dest='address', action='store', help='IPv4 address', required=True)
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def ipv4_to_ipv6(ipv4):
|
||||||
|
ipv4Hex = ''
|
||||||
|
ipv6Hextet1 = '2002'
|
||||||
|
ipv6Hextet2 = ''
|
||||||
|
ipv6Hextet3 = ''
|
||||||
|
|
||||||
|
# Split input to octets
|
||||||
|
ipv4 = ipv4.split('.',4)
|
||||||
|
|
||||||
|
# Convert IPv4 address to hex string
|
||||||
|
for octet in ipv4:
|
||||||
|
if len(hex(int(octet))[2:])>1:
|
||||||
|
ipv4Hex += hex(int(octet))[2:]
|
||||||
|
else:
|
||||||
|
ipv4Hex += '0'
|
||||||
|
ipv4Hex += hex(int(octet))[2:]
|
||||||
|
|
||||||
|
# Split into hextets
|
||||||
|
for i in range(4):
|
||||||
|
ipv6Hextet2 += (ipv4Hex[i])
|
||||||
|
for i in range(4,8):
|
||||||
|
ipv6Hextet3 += (ipv4Hex[i])
|
||||||
|
|
||||||
|
# Convert to dec and back to remove leading zeros
|
||||||
|
ipv6Hextet2 = hex(int(ipv6Hextet2,16))[2:]
|
||||||
|
ipv6Hextet3 = hex(int(ipv6Hextet3,16))[2:]
|
||||||
|
|
||||||
|
# Form 6to4 address
|
||||||
|
output_6to4 = f"{ipv6Hextet1}:{ipv6Hextet2}:{ipv6Hextet3}::/128"
|
||||||
|
return output_6to4
|
||||||
|
|
||||||
|
|
||||||
|
def main(): # pragma: no cover
|
||||||
|
ipv4 = parse_args().address
|
||||||
|
output = ipv4_to_ipv6(ipv4)
|
||||||
|
print(output)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main() # pragma: no cover
|
||||||
|
|||||||
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""Test cases for main.py."""
|
||||||
|
|
||||||
|
from app.main import ipv4_to_ipv6
|
||||||
|
|
||||||
|
def test_ipv4_to_ipv6():
|
||||||
|
result = ipv4_to_ipv6('192.168.0.1')
|
||||||
|
assert result == "2002:c0a8:1::/128"
|
||||||
|
|||||||
Reference in New Issue
Block a user