Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .config/ci/check_commits.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,24 @@ if [ -z "$commits" ]; then
fi

missing=0
copilot_missing=0
for c in $commits; do
if ! git log -1 --format=%B "$c" | grep -qi '^AI-Assisted:'; then
mapfile -t author_data < <(git log -1 --format='%an%n%ae' "$c")
author_name="${author_data[0]}"
author_email="${author_data[1]}"
is_copilot_commit=0
if [[ "$author_name" == "copilot-swe-agent[bot]" ]]; then
is_copilot_commit=1
elif [[ "$author_email" =~ \+Copilot@users\.noreply\.github\.com$ ]]; then
is_copilot_commit=1
fi

if [ $is_copilot_commit -eq 1 ]; then
echo -e "REMINDER: Commit \033[0;33m$c\033[0m (Copilot bot) is missing the 'AI-Assisted: yes|no [tool(s)]' trailer."
copilot_missing=1
continue
fi
echo -e "ERROR: Commit \033[0;33m$c\033[0m is missing the 'AI-Assisted: yes|no [tool(s)]' trailer."
missing=1
else
Expand All @@ -28,6 +44,10 @@ if [ $missing -eq 1 ]; then
echo "See the contribution guide at: https://github.com/secdev/scapy/blob/master/CONTRIBUTING.md"
exit 1
else
echo "All checked commits include the AI-Assisted trailer."
if [ $copilot_missing -eq 1 ]; then
echo "AI-Assisted trailer missing only in Copilot bot commits (reminder-only)."
else
echo "All checked commits include the AI-Assisted trailer."
fi
exit 0
fi
195 changes: 195 additions & 0 deletions test/scapy/layers/dissection_corpus.uts
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
% Dissection corpus verification tests

############
############
+ Dissection corpus
~ tshark pcaps

= Compare Scapy and tshark dissections from pcap corpus

from test.scapy.layers.dissection_corpus_helpers import _compare_enum_field
from test.scapy.layers.dissection_corpus_helpers import _compare_int_field
from test.scapy.layers.dissection_corpus_helpers import _compare_pcap_dissection
from test.scapy.layers.dissection_corpus_helpers import _compare_tcp_flags


dissection_corpus = [
{
"name": "http_content_length",
"pcap": "test/pcaps/http_content_length.pcap",
"mapping": {
"ip.src": {"scapy": "IP.src"},
"ip.dst": {"scapy": "IP.dst"},
"ip.version": {"scapy": "IP.version", "compare": _compare_int_field},
"ip.dsfield": {"scapy": "IP.tos", "compare": _compare_int_field},
"ip.len": {"scapy": "IP.len", "compare": _compare_int_field},
"ip.id": {"scapy": "IP.id", "compare": _compare_int_field},
"ip.flags": {
"scapy": "IP.flags",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.frag_offset": {"scapy": "IP.frag", "compare": _compare_int_field},
"ip.ttl": {"scapy": "IP.ttl", "compare": _compare_int_field},
"ip.proto": {
"scapy": "IP.proto",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.checksum": {"scapy": "IP.chksum", "compare": _compare_int_field},
"tcp.srcport": {"scapy": "TCP.sport", "compare": _compare_int_field},
"tcp.dstport": {"scapy": "TCP.dport", "compare": _compare_int_field},
"tcp.seq_raw": {"scapy": "TCP.seq", "compare": _compare_int_field},
"tcp.ack_raw": {"scapy": "TCP.ack", "compare": _compare_int_field},
"tcp.window_size_value": {
"scapy": "TCP.window",
"compare": _compare_int_field,
},
"tcp.checksum": {"scapy": "TCP.chksum", "compare": _compare_int_field},
"tcp.urgent_pointer": {
"scapy": "TCP.urgptr",
"compare": _compare_int_field,
},
"tcp.flags": {
"scapy": "TCP.flags",
"compare": [_compare_tcp_flags, _compare_enum_field],
},
},
},
{
"name": "netflowv9",
"pcap": "test/pcaps/netflowv9.pcap",
"mapping": {
"ip.src": {"scapy": "IP.src"},
"ip.dst": {"scapy": "IP.dst"},
"ip.version": {"scapy": "IP.version", "compare": _compare_int_field},
"ip.dsfield": {"scapy": "IP.tos", "compare": _compare_int_field},
"ip.len": {"scapy": "IP.len", "compare": _compare_int_field},
"ip.id": {"scapy": "IP.id", "compare": _compare_int_field},
"ip.flags": {
"scapy": "IP.flags",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.frag_offset": {"scapy": "IP.frag", "compare": _compare_int_field},
"ip.ttl": {"scapy": "IP.ttl", "compare": _compare_int_field},
"ip.proto": {
"scapy": "IP.proto",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.checksum": {"scapy": "IP.chksum", "compare": _compare_int_field},
"udp.srcport": {"scapy": "UDP.sport", "compare": _compare_int_field},
"udp.dstport": {"scapy": "UDP.dport", "compare": _compare_int_field},
"udp.length": {"scapy": "UDP.len", "compare": _compare_int_field},
"udp.checksum": {"scapy": "UDP.chksum", "compare": _compare_int_field},
},
},
{
"name": "http_compressed",
"pcap": "test/pcaps/http_compressed.pcap",
"mapping": {
"ip.src": {"scapy": "IP.src"},
"ip.dst": {"scapy": "IP.dst"},
"ip.version": {"scapy": "IP.version", "compare": _compare_int_field},
"ip.dsfield": {"scapy": "IP.tos", "compare": _compare_int_field},
"ip.len": {"scapy": "IP.len", "compare": _compare_int_field},
"ip.id": {"scapy": "IP.id", "compare": _compare_int_field},
"ip.flags": {
"scapy": "IP.flags",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.frag_offset": {"scapy": "IP.frag", "compare": _compare_int_field},
"ip.ttl": {"scapy": "IP.ttl", "compare": _compare_int_field},
"ip.proto": {
"scapy": "IP.proto",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.checksum": {"scapy": "IP.chksum", "compare": _compare_int_field},
"tcp.srcport": {"scapy": "TCP.sport", "compare": _compare_int_field},
"tcp.dstport": {"scapy": "TCP.dport", "compare": _compare_int_field},
"tcp.seq_raw": {"scapy": "TCP.seq", "compare": _compare_int_field},
"tcp.ack_raw": {"scapy": "TCP.ack", "compare": _compare_int_field},
"tcp.window_size_value": {
"scapy": "TCP.window",
"compare": _compare_int_field,
},
"tcp.checksum": {"scapy": "TCP.chksum", "compare": _compare_int_field},
"tcp.urgent_pointer": {
"scapy": "TCP.urgptr",
"compare": _compare_int_field,
},
"tcp.flags": {
"scapy": "TCP.flags",
"compare": [_compare_tcp_flags, _compare_enum_field],
},
},
},
{
"name": "ssh_ed25519",
"pcap": "test/pcaps/ssh_ed25519.pcap",
"mapping": {
"ip.src": {"scapy": "IP.src"},
"ip.dst": {"scapy": "IP.dst"},
"ip.version": {"scapy": "IP.version", "compare": _compare_int_field},
"ip.dsfield": {"scapy": "IP.tos", "compare": _compare_int_field},
"ip.len": {"scapy": "IP.len", "compare": _compare_int_field},
"ip.id": {"scapy": "IP.id", "compare": _compare_int_field},
"ip.flags": {
"scapy": "IP.flags",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.frag_offset": {"scapy": "IP.frag", "compare": _compare_int_field},
"ip.ttl": {"scapy": "IP.ttl", "compare": _compare_int_field},
"ip.proto": {
"scapy": "IP.proto",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.checksum": {"scapy": "IP.chksum", "compare": _compare_int_field},
"tcp.srcport": {"scapy": "TCP.sport", "compare": _compare_int_field},
"tcp.dstport": {"scapy": "TCP.dport", "compare": _compare_int_field},
"tcp.seq_raw": {"scapy": "TCP.seq", "compare": _compare_int_field},
"tcp.ack_raw": {"scapy": "TCP.ack", "compare": _compare_int_field},
"tcp.window_size_value": {
"scapy": "TCP.window",
"compare": _compare_int_field,
},
"tcp.checksum": {"scapy": "TCP.chksum", "compare": _compare_int_field},
"tcp.urgent_pointer": {
"scapy": "TCP.urgptr",
"compare": _compare_int_field,
},
"tcp.flags": {
"scapy": "TCP.flags",
"compare": [_compare_tcp_flags, _compare_enum_field],
},
},
},
{
"name": "ipfix",
"pcap": "test/pcaps/ipfix.pcap",
"mapping": {
"ip.src": {"scapy": "IP.src"},
"ip.dst": {"scapy": "IP.dst"},
"ip.version": {"scapy": "IP.version", "compare": _compare_int_field},
"ip.dsfield": {"scapy": "IP.tos", "compare": _compare_int_field},
"ip.len": {"scapy": "IP.len", "compare": _compare_int_field},
"ip.id": {"scapy": "IP.id", "compare": _compare_int_field},
"ip.flags": {
"scapy": "IP.flags",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.frag_offset": {"scapy": "IP.frag", "compare": _compare_int_field},
"ip.ttl": {"scapy": "IP.ttl", "compare": _compare_int_field},
"ip.proto": {
"scapy": "IP.proto",
"compare": [_compare_int_field, _compare_enum_field],
},
"ip.checksum": {"scapy": "IP.chksum", "compare": _compare_int_field},
"udp.srcport": {"scapy": "UDP.sport", "compare": _compare_int_field},
"udp.dstport": {"scapy": "UDP.dport", "compare": _compare_int_field},
"udp.length": {"scapy": "UDP.len", "compare": _compare_int_field},
"udp.checksum": {"scapy": "UDP.chksum", "compare": _compare_int_field},
},
},
]


for corpus_entry in dissection_corpus:
_compare_pcap_dissection(corpus_entry["pcap"], corpus_entry["mapping"])
Loading
Loading