Skip to main content

Python Hive Library

Project description

Hive library

Description

This is a python library for working with Hive REST API.

That library allows you work with Hive REST API objects such as:

Python versions

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

Dependencies

Installing

Hive library can be installed with pip:

pip3 install hive-library

Alternatively, you can grab the latest source code from github:

git clone https://github.com/hexway/hive-library.git
cd hive-library
python3 setup.py install

Projects

from hive_library import HiveLibrary
from hive_library.rest import HiveRestApi
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Create project
new_project: Optional[HiveLibrary.Project] = hive_api.create_project(
    HiveLibrary.Project(name="test_project", description="test project")
)
print(f"New project: \n{new_project}\n")

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Delete project
deleted_project: Optional[HiveLibrary.Project] = hive_api.delete_project_by_name(
    project_name=new_project.name
)
print(f"Deleted project: \n{deleted_project}\n")

Hosts

from hive_library import HiveLibrary
from hive_library.rest import HiveRestApi
from hive_library.enum import RecordTypes
from uuid import UUID
from ipaddress import IPv4Address
from time import sleep
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Create host
new_host: HiveLibrary.Host = HiveLibrary.Host()
new_host.ip = IPv4Address("192.168.0.1")
new_host.ports = [
    HiveLibrary.Host.Port(
        port=80,
        service=HiveLibrary.Host.Port.Service(
            cpelist="test service cpelist",
            name="http",
            product="Nginx",
            version="0.1337",
        ),
        protocol="tcp",
        state="open",
        records=[
            HiveLibrary.Record(
                name="test string port record",
                tool_name="test_tool_name",
                record_type=RecordTypes.NESTED.value,
                value=[
                    HiveLibrary.Record(
                        name="test nested port record 1",
                        tool_name="test_tool_name",
                        record_type=RecordTypes.STRING.value,
                        value="test nested port record 1 value",
                    ),
                    HiveLibrary.Record(
                        name="test nested port record 2",
                        tool_name="test_tool_name",
                        record_type=RecordTypes.STRING.value,
                        value="test nested port record 2 value",
                    ),
                ],
            )
        ],
        tags=[HiveLibrary.Tag(name="port_tag")],
    )
]
new_host.names = [
    HiveLibrary.Host.Name(
        hostname="evil.test.com",
        records=[
            HiveLibrary.Record(
                name="test list hostname record",
                tool_name="test_tool_name",
                record_type=RecordTypes.LIST.value,
                value=[
                    "test list hostname record value 1",
                    "test list hostname record value 2",
                ],
            )
        ],
        tags=[HiveLibrary.Tag(name="hostname_tag")],
    )
]
new_host.records = [
    HiveLibrary.Record(
        name="test nested host record",
        tool_name="test_tool_name",
        record_type=RecordTypes.STRING.value,
        value="test nested host record value",
    )
]
new_host.tags = [HiveLibrary.Tag(name="host_tag")]
task_id: Optional[UUID] = hive_api.create_host(project_id=project.id, host=new_host)

# Wait before import task is completed
for _ in range(10):
    if hive_api.task_is_completed(project_id=project.id, task_id=task_id):
        break
    else:
        sleep(1)
print(f"New host: \n{new_host}\n")

# Get list of hosts
hosts_list: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(project_id=project.id)
print(f"Hosts list: \n{hosts_list}\n")
host: HiveLibrary.Host = hosts_list[0]

Notes

from hive_library import HiveLibrary
from hive_library.rest import HiveRestApi
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Get list of hosts
hosts_list: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(project_id=project.id)
print(f"Hosts list: \n{hosts_list}\n")
host: HiveLibrary.Host = hosts_list[0]

# Create note
new_note: Optional[HiveLibrary.Note] = hive_api.create_note(
    note_text="test note text", project_id=project.id, node_id=host.id
)
print(f"New note: \n{new_note}\n")

# Get list of notes
updated_hosts_list: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(project_id=project.id)
print(f"Notes list: \n{updated_hosts_list[0].notes}\n")

Files

from hive_library import HiveLibrary
from HiveLibrary.rest import HiveRestApi
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Get list of hosts
hosts_list: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(project_id=project.id)
print(f"Hosts list: \n{hosts_list}\n")
host: HiveLibrary.Host = hosts_list[0]

# Create file
new_file: Optional[HiveLibrary.File] = hive_api.upload_file(
    file_name="test_file.txt",
    file_content=b"test file content",
    project_id=project.id,
    node_id=host.id,
)
print(f"New file: \n{new_file}\n")

# Get list of files
updated_hosts_list: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(
    project_id=project.id
)
print(f"Files list: \n{updated_hosts_list[0].files}\n")
Projects list: 
[HiveLibrary.Project(permission='ADMIN', group_id=UUID('2f1ba30c-af32-41a6-9c52-0a3a74397faa'), id=UUID('1c5be957-a2aa-4b52-9625-92faba22cdbe'), description='test project', name='test_project', create_date=datetime.datetime(2021, 5, 28, 17, 13, 34, 14052), is_archived=False, start_date=datetime.datetime(2021, 5, 28, 0, 0), end_date=datetime.datetime(2021, 6, 4, 0, 0), archive_date=None, hawser_id=None, scope=None, slug='test_project', full_slug='/default/test_project', users=None)]

Hosts list: 
[HiveLibrary.Host(checkmarks=[], files=[], id=81, uuid=UUID('b2e5e99a-8843-4465-bc12-5d4d10201425'), notes=None, ip=IPv4Address('192.168.0.1'), records=[], names=[HiveLibrary.Host.Name(checkmarks=[], files=[], id=85, ips=[], uuid=UUID('44c5720d-ccfa-431b-8770-e02de991a362'), notes=None, hostname='unit.test.com', records=[], tags=[HiveLibrary.Tag(id=88, uuid=None, name='hostname_tag', parent_id=None, base_node_id=None, labels=[], parent_labels=[])])], ports=[HiveLibrary.Host.Port(checkmarks=[], files=[], id=92, uuid=UUID('ae8e73c0-23c4-4e1e-8c59-2faf3d776ecd'), notes=None, port=80, service=HiveLibrary.Host.Port.Service(name='http', product='Unit test', version='0.1', cpelist='test service cpelist'), protocol='tcp', state='open', records=[], tags=[HiveLibrary.Tag(id=94, uuid=UUID('6170fb4a-9ed0-4308-aff7-f7b273cbc067'), name='port_tag', parent_id=None, base_node_id=None, labels=[], parent_labels=[])])], tags=[HiveLibrary.Tag(id=90, uuid=None, name='host_tag', parent_id=None, base_node_id=None, labels=[], parent_labels=[])])]

New file: 
HiveLibrary.File(base_node_id=None, caption=None, id=101, type=None, uuid=UUID('09e5c269-6741-4132-a7f5-391063720be0'), post_time=datetime.datetime(2021, 5, 28, 17, 13, 35, 357708), create_time=None, user_uuid=UUID('d491cf11-eb05-40f6-a915-d38bb22269f3'), creator_uuid=None, control_sum='sha256:60f5237ed4049f0382661ef009d2bc42e48c3ceb3edb6600f7024e7ab3b838f3', name='test_file.txt', size=17, mime_type='text/plain', node_id=None, parent_id=81, labels=['File'], parent_labels=['Ip'])

Files list: 
[HiveLibrary.File(base_node_id=None, caption=None, id=101, type=None, uuid=UUID('09e5c269-6741-4132-a7f5-391063720be0'), post_time=datetime.datetime(2021, 5, 28, 17, 13, 35, 357708), create_time=None, user_uuid=UUID('d491cf11-eb05-40f6-a915-d38bb22269f3'), creator_uuid=None, control_sum='sha256:60f5237ed4049f0382661ef009d2bc42e48c3ceb3edb6600f7024e7ab3b838f3', name='test_file.txt', size=17, mime_type='text/plain', node_id=None, parent_id=None, labels=[], parent_labels=[])]

Search

from hive_library import HiveLibrary
from HiveLibrary.rest import HiveRestApi
from ipaddress import IPv4Address
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Search variables
search_ip: IPv4Address = IPv4Address("192.168.0.1")
search_port: int = 80
search_hostname: str = "unit.test.com"
search_tag: str = "host_tag"
search_service: str = "http"

# Search by IP
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_ip(
    project_id=project.id, ip=search_ip
)
print(f"Search by IP ({search_ip}) hosts: \n{search_hosts}\n")

# Search by Port
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_port(
    project_id=project.id, port=search_port
)
print(f"Search by Port ({search_port}) hosts: \n{search_hosts}\n")

# Search by IP and Port
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_ip_and_port(
    project_id=project.id, ip=search_ip, port=search_port
)
print(f"Search by IP and Port ({search_ip}, {search_port}) hosts: \n{search_hosts}\n")

# Search by Hostname
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_hostname(
    project_id=project.id, hostname=search_hostname
)
print(f"Search by Hostname ({search_hostname}) hosts: \n{search_hosts}\n")

# Search by Tag
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_tag(
    project_id=project.id, tag=search_tag
)
print(f"Search by Tag ({search_tag}) hosts: \n{search_hosts}\n")

# Search by Service
search_hosts: Optional[List[HiveLibrary.Host]] = hive_api.search_by_service(
    project_id=project.id, service=search_service
)
print(f"Search by Service ({search_service}) hosts: \n{search_hosts}\n")

Import

from hive_library import HiveLibrary
from hive_library.rest import HiveRestApi
from uuid import UUID
from time import sleep
from typing import Optional, List

# Connect to Hive server
username: str = "root@ro.ot"
password: str = "root12345"
server: str = "http://127.0.0.1:8080"
hive_api: HiveRestApi = HiveRestApi(username=username, password=password, server=server)

# Get list of projects
projects_list: Optional[List[HiveLibrary.Project]] = hive_api.get_projects_list()
print(f"Projects list: \n{projects_list}\n")
project: HiveLibrary.Project = projects_list[0]

# Import from nmap xml
task_id: Optional[UUID] = hive_api.import_from_file(
    file_location="tests/nmap_test.xml", import_type="nmap", project_id=project.id
)

# Wait before import task is completed
for _ in range(10):
    if hive_api.task_is_completed(project_id=project.id, task_id=task_id):
        break
    else:
        sleep(1)

# Get imported hosts
imported_hosts: Optional[List[HiveLibrary.Host]] = hive_api.get_hosts(project_id=project.id)
print(f"Imported hosts: \n{imported_hosts}\n")
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 7.91 scan initiated Tue Apr 20 17:14:28 2021 as: nmap -A -Pn -&#45;open -oX tests/nmap_test.xml -v 192.168.1.1 -->
<nmaprun scanner="nmap" args="nmap -A -Pn -&#45;open -oX tests/nmap_test.xml -v 192.168.1.1" start="1618928068" startstr="Tue Apr 20 17:14:28 2021" version="7.91" xmloutputversion="1.05">
<scaninfo type="connect" protocol="tcp" numservices="1000" services="1,3-4,6-7,9,13,17,19-26,30,32-33,37,42-43,49,53,70,79-85,88-90,99-100,106,109-111,113,119,125,135,139,143-144,146,161,163,179,199,211-212,222,254-256,259,264,280,301,306,311,340,366,389,406-407,416-417,425,427,443-445,458,464-465,481,497,500,512-515,524,541,543-545,548,554-555,563,587,593,616-617,625,631,636,646,648,666-668,683,687,691,700,705,711,714,720,722,726,749,765,777,783,787,800-801,808,843,873,880,888,898,900-903,911-912,981,987,990,992-993,995,999-1002,1007,1009-1011,1021-1100,1102,1104-1108,1110-1114,1117,1119,1121-1124,1126,1130-1132,1137-1138,1141,1145,1147-1149,1151-1152,1154,1163-1166,1169,1174-1175,1183,1185-1187,1192,1198-1199,1201,1213,1216-1218,1233-1234,1236,1244,1247-1248,1259,1271-1272,1277,1287,1296,1300-1301,1309-1311,1322,1328,1334,1352,1417,1433-1434,1443,1455,1461,1494,1500-1501,1503,1521,1524,1533,1556,1580,1583,1594,1600,1641,1658,1666,1687-1688,1700,1717-1721,1723,1755,1761,1782-1783,1801,1805,1812,1839-1840,1862-1864,1875,1900,1914,1935,1947,1971-1972,1974,1984,1998-2010,2013,2020-2022,2030,2033-2035,2038,2040-2043,2045-2049,2065,2068,2099-2100,2103,2105-2107,2111,2119,2121,2126,2135,2144,2160-2161,2170,2179,2190-2191,2196,2200,2222,2251,2260,2288,2301,2323,2366,2381-2383,2393-2394,2399,2401,2492,2500,2522,2525,2557,2601-2602,2604-2605,2607-2608,2638,2701-2702,2710,2717-2718,2725,2800,2809,2811,2869,2875,2909-2910,2920,2967-2968,2998,3000-3001,3003,3005-3007,3011,3013,3017,3030-3031,3052,3071,3077,3128,3168,3211,3221,3260-3261,3268-3269,3283,3300-3301,3306,3322-3325,3333,3351,3367,3369-3372,3389-3390,3404,3476,3493,3517,3527,3546,3551,3580,3659,3689-3690,3703,3737,3766,3784,3800-3801,3809,3814,3826-3828,3851,3869,3871,3878,3880,3889,3905,3914,3918,3920,3945,3971,3986,3995,3998,4000-4006,4045,4111,4125-4126,4129,4224,4242,4279,4321,4343,4443-4446,4449,4550,4567,4662,4848,4899-4900,4998,5000-5004,5009,5030,5033,5050-5051,5054,5060-5061,5080,5087,5100-5102,5120,5190,5200,5214,5221-5222,5225-5226,5269,5280,5298,5357,5405,5414,5431-5432,5440,5500,5510,5544,5550,5555,5560,5566,5631,5633,5666,5678-5679,5718,5730,5800-5802,5810-5811,5815,5822,5825,5850,5859,5862,5877,5900-5904,5906-5907,5910-5911,5915,5922,5925,5950,5952,5959-5963,5987-5989,5998-6007,6009,6025,6059,6100-6101,6106,6112,6123,6129,6156,6346,6389,6502,6510,6543,6547,6565-6567,6580,6646,6666-6669,6689,6692,6699,6779,6788-6789,6792,6839,6881,6901,6969,7000-7002,7004,7007,7019,7025,7070,7100,7103,7106,7200-7201,7402,7435,7443,7496,7512,7625,7627,7676,7741,7777-7778,7800,7911,7920-7921,7937-7938,7999-8002,8007-8011,8021-8022,8031,8042,8045,8080-8090,8093,8099-8100,8180-8181,8192-8194,8200,8222,8254,8290-8292,8300,8333,8383,8400,8402,8443,8500,8600,8649,8651-8652,8654,8701,8800,8873,8888,8899,8994,9000-9003,9009-9011,9040,9050,9071,9080-9081,9090-9091,9099-9103,9110-9111,9200,9207,9220,9290,9415,9418,9485,9500,9502-9503,9535,9575,9593-9595,9618,9666,9876-9878,9898,9900,9917,9929,9943-9944,9968,9998-10004,10009-10010,10012,10024-10025,10082,10180,10215,10243,10566,10616-10617,10621,10626,10628-10629,10778,11110-11111,11967,12000,12174,12265,12345,13456,13722,13782-13783,14000,14238,14441-14442,15000,15002-15004,15660,15742,16000-16001,16012,16016,16018,16080,16113,16992-16993,17877,17988,18040,18101,18988,19101,19283,19315,19350,19780,19801,19842,20000,20005,20031,20221-20222,20828,21571,22939,23502,24444,24800,25734-25735,26214,27000,27352-27353,27355-27356,27715,28201,30000,30718,30951,31038,31337,32768-32785,33354,33899,34571-34573,35500,38292,40193,40911,41511,42510,44176,44442-44443,44501,45100,48080,49152-49161,49163,49165,49167,49175-49176,49400,49999-50003,50006,50300,50389,50500,50636,50800,51103,51493,52673,52822,52848,52869,54045,54328,55055-55056,55555,55600,56737-56738,57294,57797,58080,60020,60443,61532,61900,62078,63331,64623,64680,65000,65129,65389"/>
<verbose level="1"/>
<debugging level="0"/>
<host starttime="1618928068" endtime="1618928150"><status state="up" reason="user-set" reason_ttl="0"/>
<address addr="192.168.1.1" addrtype="ipv4"/>
<hostnames>
<hostname name="unit.test.com" type="PTR"/>
</hostnames>
<ports><extraports state="filtered" count="997">
<extrareasons reason="no-responses" count="997"/>
</extraports>
<port protocol="tcp" portid="12345"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="http" product="Unit test" method="probed" conf="10"/><script id="http-methods" output="&#xa;  Supported Methods: GET HEAD POST OPTIONS"><table key="Supported Methods">
<elem>GET</elem>
<elem>HEAD</elem>
<elem>POST</elem>
<elem>OPTIONS</elem>
</table>
</script><script id="http-title" output="Site doesn&apos;t have a title (text/html)."></script></port>
</ports>
<times srtt="1584" rttvar="510" to="100000"/>
</host>
<runstats><finished time="1618928150" timestr="Tue Apr 20 17:15:50 2021" summary="Nmap done at Tue Apr 20 17:15:50 2021; 1 IP address (1 host up) scanned in 82.90 seconds" elapsed="82.90" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hive_library-0.0.1b1.tar.gz (30.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hive_library-0.0.1b1-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file hive_library-0.0.1b1.tar.gz.

File metadata

  • Download URL: hive_library-0.0.1b1.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.5

File hashes

Hashes for hive_library-0.0.1b1.tar.gz
Algorithm Hash digest
SHA256 8b6791735dcb38a09f102891f385cc7d4e7b48c50676636b3763b8019aeb2032
MD5 6ff6778143cf2671aa13cc5416756906
BLAKE2b-256 7d2e9c9902af7da3c495ea5ed28dd0a5a771f3bbf105e18219847897b42f8bd5

See more details on using hashes here.

File details

Details for the file hive_library-0.0.1b1-py3-none-any.whl.

File metadata

  • Download URL: hive_library-0.0.1b1-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.5

File hashes

Hashes for hive_library-0.0.1b1-py3-none-any.whl
Algorithm Hash digest
SHA256 bed17dc5bbc7958f7476a5306aee6f492cb310f573959983f9ec147f09d4f09a
MD5 0cb5fba784cc010af5995e19095b9828
BLAKE2b-256 52ec4f3f7b3083b5880d8024a4662fcd6d0effda9dc34a67ee9ff6b6a3ae0e2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page