Skip to content

Instantly share code, notes, and snippets.

@ahyt910
Last active April 22, 2019 09:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahyt910/971d481bec1555bc7f15bb335b1559f7 to your computer and use it in GitHub Desktop.
Save ahyt910/971d481bec1555bc7f15bb335b1559f7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### `edges(*, nodes=\".*\", remoteNodes=\".*\", edgeType, question_name)`\n",
"主観ノードから指定のプロトコルで接続された対向ノードを調査します。\n",
"\n",
"params:\n",
" - nodes: 主観ノードをホスト名で指定(正規表現可)\n",
" - remoteNodes: 対向ノードをホスト名で指定(正規表現可)\n",
" - edgeType: ネイバータイプを以下から選択 \n",
" - bgp\n",
" - eigrp\n",
" - ipsec\n",
" - isis\n",
" - layer1\n",
" - layer2\n",
" - layer3\n",
" - ospf\n",
" - rip\n",
" - vxlan"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# ?bfq.edges"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'example_snapshot'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%run startup.py\n",
"load_questions()\n",
"NETWORK_NAME = \"example_network\"\n",
"SNAPSHOT_NAME = \"example_snapshot\"\n",
"SNAPSHOT_PATH = \"networks/example\"\n",
"\n",
"bf_set_network(NETWORK_NAME)\n",
"bf_init_snapshot(SNAPSHOT_PATH, name=SNAPSHOT_NAME, overwrite=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"主観ノードから全ネイバーを取得する場合"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>IPs</th>\n",
" <th>Remote_Interface</th>\n",
" <th>Remote_IPs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as2border1[GigabitEthernet2/0]</td>\n",
" <td>['2.12.12.1']</td>\n",
" <td>as2core2[GigabitEthernet1/0]</td>\n",
" <td>['2.12.12.2']</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>as2border1[GigabitEthernet0/0]</td>\n",
" <td>['10.12.11.2']</td>\n",
" <td>as1border1[GigabitEthernet1/0]</td>\n",
" <td>['10.12.11.1']</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>as2border1[GigabitEthernet1/0]</td>\n",
" <td>['2.12.11.1']</td>\n",
" <td>as2core1[GigabitEthernet0/0]</td>\n",
" <td>['2.12.11.2']</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Interface IPs \\\n",
"0 as2border1[GigabitEthernet2/0] ['2.12.12.1'] \n",
"1 as2border1[GigabitEthernet0/0] ['10.12.11.2'] \n",
"2 as2border1[GigabitEthernet1/0] ['2.12.11.1'] \n",
"\n",
" Remote_Interface Remote_IPs \n",
"0 as2core2[GigabitEthernet1/0] ['2.12.12.2'] \n",
"1 as1border1[GigabitEthernet1/0] ['10.12.11.1'] \n",
"2 as2core1[GigabitEthernet0/0] ['2.12.11.2'] "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as2border1\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"主観ノードからBGPネイバーのみを取得する場合"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Node</th>\n",
" <th>IP</th>\n",
" <th>AS_Number</th>\n",
" <th>Remote_Node</th>\n",
" <th>Remote_IP</th>\n",
" <th>Remote_AS_Number</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as2border1</td>\n",
" <td>2.1.1.1</td>\n",
" <td>2</td>\n",
" <td>as2core1</td>\n",
" <td>2.1.2.1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>as2border1</td>\n",
" <td>10.12.11.2</td>\n",
" <td>2</td>\n",
" <td>as1border1</td>\n",
" <td>10.12.11.1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>as2border1</td>\n",
" <td>2.1.1.1</td>\n",
" <td>2</td>\n",
" <td>as2core2</td>\n",
" <td>2.1.2.2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Node IP AS_Number Remote_Node Remote_IP Remote_AS_Number\n",
"0 as2border1 2.1.1.1 2 as2core1 2.1.2.1 2 \n",
"1 as2border1 10.12.11.2 2 as1border1 10.12.11.1 1 \n",
"2 as2border1 2.1.1.1 2 as2core2 2.1.2.2 2 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as2border1\", edgeType=\"bgp\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"主観ノードからOSPFネイバーのみを取得する場合"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>Remote_Interface</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as2border1[GigabitEthernet1/0]</td>\n",
" <td>as2core1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>as2border1[GigabitEthernet2/0]</td>\n",
" <td>as2core2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Interface Remote_Interface\n",
"0 as2border1[GigabitEthernet1/0] as2core1[GigabitEthernet0/0]\n",
"1 as2border1[GigabitEthernet2/0] as2core2[GigabitEthernet1/0]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as2border1\", edgeType=\"ospf\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"主観ノードが対向ノードと接続されているか確認する場合"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>IPs</th>\n",
" <th>Remote_Interface</th>\n",
" <th>Remote_IPs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as2border1[GigabitEthernet0/0]</td>\n",
" <td>['10.12.11.2']</td>\n",
" <td>as1border1[GigabitEthernet1/0]</td>\n",
" <td>['10.12.11.1']</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Interface IPs \\\n",
"0 as2border1[GigabitEthernet0/0] ['10.12.11.2'] \n",
"\n",
" Remote_Interface Remote_IPs \n",
"0 as1border1[GigabitEthernet1/0] ['10.12.11.1'] "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as2border1\", remoteNodes=\"as1border1\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"主観ノードが対向ノードと指定のタイプで接続されているか確認する場合"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>Remote_Interface</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [Interface, Remote_Interface]\n",
"Index: []"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as2border1\", remoteNodes=\"as1border1\", edgeType=\"ospf\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"全OSPFネイバーの組み合わせを確認する場合"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>Remote_Interface</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as2dist2[GigabitEthernet0/0]</td>\n",
" <td>as2core2[GigabitEthernet2/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>as2core2[GigabitEthernet2/0]</td>\n",
" <td>as2dist2[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>as2dist1[GigabitEthernet1/0]</td>\n",
" <td>as2core2[GigabitEthernet3/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>as2core1[GigabitEthernet1/0]</td>\n",
" <td>as2border2[GigabitEthernet2/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>as2dist2[GigabitEthernet1/0]</td>\n",
" <td>as2core1[GigabitEthernet3/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>as2core2[GigabitEthernet1/0]</td>\n",
" <td>as2border1[GigabitEthernet2/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>as2dist1[GigabitEthernet0/0]</td>\n",
" <td>as2core1[GigabitEthernet2/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>as3core1[GigabitEthernet1/0]</td>\n",
" <td>as3border1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>as2core1[GigabitEthernet0/0]</td>\n",
" <td>as2border1[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>as2core2[GigabitEthernet0/0]</td>\n",
" <td>as2border2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>as3core1[GigabitEthernet0/0]</td>\n",
" <td>as3border2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>as2border1[GigabitEthernet1/0]</td>\n",
" <td>as2core1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>as2border2[GigabitEthernet1/0]</td>\n",
" <td>as2core2[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>as2border1[GigabitEthernet2/0]</td>\n",
" <td>as2core2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>as2core1[GigabitEthernet2/0]</td>\n",
" <td>as2dist1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>as1border1[GigabitEthernet0/0]</td>\n",
" <td>as1core1[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>as2core2[GigabitEthernet3/0]</td>\n",
" <td>as2dist1[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>as3border2[GigabitEthernet1/0]</td>\n",
" <td>as3core1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>as1border2[GigabitEthernet1/0]</td>\n",
" <td>as1core1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>as1core1[GigabitEthernet0/0]</td>\n",
" <td>as1border2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>as1core1[GigabitEthernet1/0]</td>\n",
" <td>as1border1[GigabitEthernet0/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>as2border2[GigabitEthernet2/0]</td>\n",
" <td>as2core1[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>as2core1[GigabitEthernet3/0]</td>\n",
" <td>as2dist2[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>as3border1[GigabitEthernet0/0]</td>\n",
" <td>as3core1[GigabitEthernet1/0]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Interface Remote_Interface\n",
"0 as2dist2[GigabitEthernet0/0] as2core2[GigabitEthernet2/0] \n",
"1 as2core2[GigabitEthernet2/0] as2dist2[GigabitEthernet0/0] \n",
"2 as2dist1[GigabitEthernet1/0] as2core2[GigabitEthernet3/0] \n",
"3 as2core1[GigabitEthernet1/0] as2border2[GigabitEthernet2/0]\n",
"4 as2dist2[GigabitEthernet1/0] as2core1[GigabitEthernet3/0] \n",
"5 as2core2[GigabitEthernet1/0] as2border1[GigabitEthernet2/0]\n",
"6 as2dist1[GigabitEthernet0/0] as2core1[GigabitEthernet2/0] \n",
"7 as3core1[GigabitEthernet1/0] as3border1[GigabitEthernet0/0]\n",
"8 as2core1[GigabitEthernet0/0] as2border1[GigabitEthernet1/0]\n",
"9 as2core2[GigabitEthernet0/0] as2border2[GigabitEthernet1/0]\n",
"10 as3core1[GigabitEthernet0/0] as3border2[GigabitEthernet1/0]\n",
"11 as2border1[GigabitEthernet1/0] as2core1[GigabitEthernet0/0] \n",
"12 as2border2[GigabitEthernet1/0] as2core2[GigabitEthernet0/0] \n",
"13 as2border1[GigabitEthernet2/0] as2core2[GigabitEthernet1/0] \n",
"14 as2core1[GigabitEthernet2/0] as2dist1[GigabitEthernet0/0] \n",
"15 as1border1[GigabitEthernet0/0] as1core1[GigabitEthernet1/0] \n",
"16 as2core2[GigabitEthernet3/0] as2dist1[GigabitEthernet1/0] \n",
"17 as3border2[GigabitEthernet1/0] as3core1[GigabitEthernet0/0] \n",
"18 as1border2[GigabitEthernet1/0] as1core1[GigabitEthernet0/0] \n",
"19 as1core1[GigabitEthernet0/0] as1border2[GigabitEthernet1/0]\n",
"20 as1core1[GigabitEthernet1/0] as1border1[GigabitEthernet0/0]\n",
"21 as2border2[GigabitEthernet2/0] as2core1[GigabitEthernet1/0] \n",
"22 as2core1[GigabitEthernet3/0] as2dist2[GigabitEthernet1/0] \n",
"23 as3border1[GigabitEthernet0/0] as3core1[GigabitEthernet1/0] "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(edgeType=\"ospf\").answer().frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"正規表現でノードを指定する場合(ホスト名でAS番号が識別できる場合のみ使用可能)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe tex2jax_ignore\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Interface</th>\n",
" <th>IPs</th>\n",
" <th>Remote_Interface</th>\n",
" <th>Remote_IPs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>as1border1[GigabitEthernet1/0]</td>\n",
" <td>['10.12.11.1']</td>\n",
" <td>as2border1[GigabitEthernet0/0]</td>\n",
" <td>['10.12.11.2']</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Interface IPs \\\n",
"0 as1border1[GigabitEthernet1/0] ['10.12.11.1'] \n",
"\n",
" Remote_Interface Remote_IPs \n",
"0 as2border1[GigabitEthernet0/0] ['10.12.11.2'] "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bfq.edges(nodes=\"as1.*\", remoteNodes=\"as2.*\").answer().frame()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment