Quickstart
This guide will help you get started with bhopengraph quickly. We’ll create a simple graph with a few nodes and edges to demonstrate the basic functionality.
Basic Example
Here’s a minimal example that creates a simple graph with two nodes and one edge:
from bhopengraph.OpenGraph import OpenGraph
from bhopengraph.Node import Node
from bhopengraph.Edge import Edge
from bhopengraph.Properties import Properties
# Create an OpenGraph instance
graph = OpenGraph(source_kind="Base")
# Create nodes
bob_node = Node(
id="123",
kinds=["Person", "Base"],
properties=Properties(
displayname="bob",
property="a",
objectid="123",
name="BOB"
)
)
alice_node = Node(
id="234",
kinds=["Person", "Base"],
properties=Properties(
displayname="alice",
property="b",
objectid="234",
name="ALICE"
)
)
# Add nodes to graph
graph.addNode(bob_node)
graph.addNode(alice_node)
# Create edge: Bob knows Alice
knows_edge = Edge(
start_node_id=alice_node.id,
end_node_id=bob_node.id,
kind="Knows"
)
# Add edge to graph
graph.addEdge(knows_edge)
# Export to file
graph.exportToFile("minimal_example.json")
This creates a JSON file that follows the BloodHound OpenGraph schema.
Key Concepts
OpenGraph: The main container that holds all nodes and edges.
Node: Represents an entity in your graph (like a person, computer, or group).
Edge: Represents a relationship between two nodes.
Properties: Contains metadata about nodes or edges.
Working with Nodes
Nodes can have multiple types (kinds) and various properties:
# Create a computer node
computer_node = Node(
id="COMP001",
kinds=["Computer", "Base"],
properties=Properties(
displayname="DESKTOP-COMP001",
name="DESKTOP-COMP001",
objectid="S-1-5-21-1234567890-1234567890-1234567890-1001",
operatingsystem="Windows 10",
primarygroup="DOMAIN COMPUTERS"
)
)
Working with Edges
Edges define relationships between nodes:
# Create an "AdminTo" relationship
admin_edge = Edge(
start_node_id="USER001",
end_node_id="COMP001",
kind="AdminTo"
)
# Create a "MemberOf" relationship
member_edge = Edge(
start_node_id="USER001",
end_node_id="ADMINS",
kind="MemberOf"
)
Exporting Your Graph
You can export your graph in different formats:
# Export as JSON (default)
graph.exportToFile("my_graph.json")
# Export with custom formatting
graph.exportToFile("my_graph.json", indent=2)
# Get the JSON string directly
json_string = graph.toJson()
Next Steps
Check out the Examples for more complex examples
Read the API Reference for detailed API documentation
Learn about advanced_features for more advanced usage
The examples in the Examples section provide more detailed scenarios and use cases.