From e04e03859930179a9d0d9189b06b27590384451b Mon Sep 17 00:00:00 2001 From: Robert David Graham Date: Fri, 8 Aug 2014 22:12:34 -0700 Subject: [PATCH] vlan --- src/main.c | 2 ++ src/templ-pkt.c | 30 ++++++++++++++++++++++++++++++ src/templ-pkt.h | 1 + 3 files changed, 33 insertions(+) diff --git a/src/main.c b/src/main.c index c4109c5d..4ecb42a7 100644 --- a/src/main.c +++ b/src/main.c @@ -1170,6 +1170,8 @@ main_scan(struct Masscan *masscan) if (masscan->nmap.ttl) template_set_ttl(parms->tmplset, masscan->nmap.ttl); + if (masscan->nic[0].is_vlan) + template_set_vlan(parms->tmplset, masscan->nic[0].vlan_id); /* diff --git a/src/templ-pkt.c b/src/templ-pkt.c index d449a6f1..e014d892 100644 --- a/src/templ-pkt.c +++ b/src/templ-pkt.c @@ -1051,6 +1051,36 @@ template_set_ttl(struct TemplateSet *tmplset, unsigned ttl) } } +void +template_set_vlan(struct TemplateSet *tmplset, unsigned vlan) +{ + unsigned i; + + for (i=0; icount; i++) { + struct TemplatePacket *tmpl = &tmplset->pkts[i]; + unsigned char *px; + + if (tmpl->length < 14) + continue; + + px = (unsigned char*)malloc(tmpl->length + 4); + memcpy(px, tmpl->packet, 12); + memcpy(px+16, tmpl->packet+12, tmpl->length - 12); + + px[12] = 0x81; + px[13] = 0x00; + px[14] = (unsigned char)(vlan>>8); + px[15] = (unsigned char)(vlan>>0); + + tmpl->packet = px; + tmpl->length += 4; + + tmpl->offset_ip += 4; + tmpl->offset_tcp += 4; + tmpl->offset_app += 4; + } +} + /*************************************************************************** diff --git a/src/templ-pkt.h b/src/templ-pkt.h index 1c54abf5..04acce12 100644 --- a/src/templ-pkt.h +++ b/src/templ-pkt.h @@ -166,5 +166,6 @@ unsigned template_get_source_ip(struct TemplateSet *tmplset); void template_set_source_port(struct TemplateSet *tmplset, unsigned port); void template_set_ttl(struct TemplateSet *tmplset, unsigned ttl); +void template_set_vlan(struct TemplateSet *tmplset, unsigned vlan); #endif