Calls p0f and prints a user-friendly output
(pkt)
| 711 | |
| 712 | |
| 713 | def prnp0f(pkt): |
| 714 | """Calls p0f and prints a user-friendly output""" |
| 715 | try: |
| 716 | r = p0f(pkt) |
| 717 | except Exception: |
| 718 | return |
| 719 | |
| 720 | sig, direction = packet2p0f(pkt) |
| 721 | is_tcp_sig = isinstance(sig, TCP_Signature) |
| 722 | to_server = direction == "request" |
| 723 | |
| 724 | if is_tcp_sig: |
| 725 | pkt_type = "SYN" if to_server else "SYN+ACK" |
| 726 | else: |
| 727 | pkt_type = "HTTP Request" if to_server else "HTTP Response" |
| 728 | |
| 729 | res = pkt.sprintf(".-[ %IP.src%:%TCP.sport% -> %IP.dst%:%TCP.dport% (" + pkt_type + ") ]-\n|\n") # noqa: E501 |
| 730 | fields = [] |
| 731 | |
| 732 | def add_field(name, value): |
| 733 | fields.append("| %-8s = %s\n" % (name, value)) |
| 734 | |
| 735 | cli_or_svr = "Client" if to_server else "Server" |
| 736 | add_field(cli_or_svr, pkt.sprintf("%IP.src%:%TCP.sport%")) |
| 737 | |
| 738 | if r: |
| 739 | label = r[0] |
| 740 | app_or_os = "App" if label[1] == "!" else "OS" |
| 741 | add_field(app_or_os, label[2] + " " + label[3]) |
| 742 | if len(label) == 5: # label includes sys |
| 743 | add_field("Sys", ", ".join(name for name in label[4])) |
| 744 | if is_tcp_sig: |
| 745 | add_field("Distance", r[1]) |
| 746 | else: |
| 747 | app_or_os = "OS" if is_tcp_sig else "App" |
| 748 | add_field(app_or_os, "UNKNOWN") |
| 749 | |
| 750 | add_field("Raw sig", str(sig)) |
| 751 | |
| 752 | res += "".join(fields) |
| 753 | res += "`____\n" |
| 754 | print(res) |
| 755 | |
| 756 | |
| 757 | def p0f_impersonate(pkt, osgenre=None, osdetails=None, signature=None, |
nothing calls this directly
no test coverage detected
searching dependent graphs…