Tabulate tables not merging cells

Hell everyone,

I am writing code that sends out an ICMP request to all hosts on a network and then print out in to a table if they are up or down.

The problem im having is with tabulate and not being able to merge the top row cells so i can centre the network address.

this is what i have so far. I have also tried using tabulate merge module but im not able to get it to work correctly.

import sys
from scapy.all import *
from tabulate import tabulate
import tabulate_cell_merger.tabulate_cell_merger

def merge(clients, status):
    merged_list = tuple(zip(clients, status))
    return merged_list

print(f"\n\nWelcome to the NetworkScanner!\nType -h for usage\n\n")

if sys.argv[1] == str("-h"):
    print("type in the IP Address you want to check or use CIDR to search a range\n")
    print("Usage>>: <IP_ADDRESS/CIDR> <-v = verbose off, --v == verbose on> \n\n")

ip = Net(sys.argv[1])
ip_list = []
clients = []
status = []
verb = False

if sys.argv[2] == str("-v"):
    verb = False
elif sys.argv[2] == str("--v"):
    verb = True

for add in ip:

for ips in ip_list:
    pac = Ether(dst = "ff:ff:ff:ff:ff:ff")/IP(dst=ips)/ICMP()
    ans = srp1(pac,timeout=0.5, verbose = verb)
    if ans is None:
data = merge(clients, status)
header = [sys.argv[1]]

print(tabulate(data, headers = header, tablefmt = 'fancy_grid'))

Thanks in advance for any help. This is for a cyber security assessment so just require advice. No completed code :stuck_out_tongue:

Thank you

There is no need to call str() on a “string”.

Is the problem that you have data that is two columns but supply only one header?

Hi Barry yep that’s the problem I got. I just need a single cell on the top of my table.

Thanks for the heads up with calling the string on string