MCPcopy Index your code
hub / github.com/secdev/scapy / prnp0f

Function prnp0f

scapy/modules/p0f.py:713–754  ·  view source on GitHub ↗

Calls p0f and prints a user-friendly output

(pkt)

Source from the content-addressed store, hash-verified

711
712
713def 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
757def p0f_impersonate(pkt, osgenre=None, osdetails=None, signature=None,

Callers

nothing calls this directly

Calls 5

add_fieldFunction · 0.85
joinMethod · 0.80
p0fFunction · 0.70
packet2p0fFunction · 0.70
sprintfMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…