public void RawTest() { SocketEcho echo = new SocketEcho(); IPAddress self = GetFirstInterface(AddressFamily.InterNetwork).Item2; echo.SendRaw(self); try { string xml = string.Format(raw_template, "RawV4", self, "PupStateModel", "12"); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(2, actions.Count); var de = actions[0].dataModel.find("ip_packet.str.str"); Assert.NotNull(de); string str = (string)de.DefaultValue; Assert.AreEqual("SendOnly!", str); } finally { echo.Socket.Close(); } }
public void MulticastUdp6Test() { ushort dstport = TestBase.MakePort(53000, 54000); ushort srcport = TestBase.MakePort(54000, 55000); var local = GetFirstInterface(AddressFamily.InterNetworkV6).Item2; SocketEcho echo = new SocketEcho() { localIp = local }; echo.SendOnly(IPAddress.Parse("ff02::22"), dstport); try { string xml = string.Format(template, "Udp", "ff02::22", srcport.ToString(), "Hello World", dstport.ToString()); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Peach.Core.Publishers.UdpPublisher pub = dom.tests[0].publishers[0] as Peach.Core.Publishers.UdpPublisher; pub.Interface = local; RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(3, actions.Count); var de1 = actions[0].dataModel.find("TheDataModel.str"); Assert.NotNull(de1); var de2 = actions[1].dataModel.find("ResponseModel.str"); Assert.NotNull(de2); string send = (string)de1.DefaultValue; string recv = (string)de2.DefaultValue; Assert.AreEqual("Hello World", send); Assert.AreEqual("SendOnly!", recv); } finally { echo.Socket.Close(); } }
public void MulticastUdpTest() { ushort dstport = TestBase.MakePort(53000, 54000); ushort srcport = TestBase.MakePort(54000, 55000); SocketEcho echo = new SocketEcho(); echo.SendOnly(IPAddress.Parse("234.5.6.7"), dstport); try { string xml = string.Format(template, "Udp", "234.5.6.7", srcport.ToString(), "Hello World", dstport.ToString()); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(3, actions.Count); var de1 = actions[0].dataModel.find("TheDataModel.str"); Assert.NotNull(de1); var de2 = actions[1].dataModel.find("ResponseModel.str"); Assert.NotNull(de2); var addr = actions[2].dataModel.DefaultValue; Assert.NotNull(addr); IPAddress ip = new IPAddress(addr.BitsToArray()); Assert.NotNull(ip); string send = (string)de1.DefaultValue; string recv = (string)de2.DefaultValue; Assert.AreEqual("Hello World", send); Assert.AreEqual("SendOnly!", recv); } finally { echo.Socket.Close(); } }
public void UdpSizeMutateTest() { // If mutation makes the output too large, the socket publisher should skip iteration SocketEcho echo = new SocketEcho(); echo.Start(IPAddress.Loopback, 2); IPEndPoint ep = echo.Socket.LocalEndPoint as IPEndPoint; string xml = string.Format(template, "Udp", IPAddress.Loopback, ep.Port, new string('a', 40000), "0"); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); dom.tests[0].includedMutators = new List <string>(); dom.tests[0].includedMutators.Add("DataElementDuplicateMutator"); RunConfiguration config = new RunConfiguration(); config.range = true; config.rangeStart = 0; config.rangeStop = 1; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(4, dataModels.Count); var de1 = dataModels[1].find("ResponseModel.str"); Assert.NotNull(de1); string recv1 = (string)de1.DefaultValue; Assert.AreEqual("Recv 40000 bytes!", recv1); }
public void Udp6Test() { SocketEcho echo = new SocketEcho(); echo.Start(IPAddress.IPv6Loopback); IPEndPoint ep = echo.Socket.LocalEndPoint as IPEndPoint; string xml = string.Format(template, "Udp", IPAddress.IPv6Loopback, ep.Port, "Hello World", "0"); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(3, actions.Count); var de1 = actions[0].dataModel.find("TheDataModel.str"); Assert.NotNull(de1); var de2 = actions[1].dataModel.find("ResponseModel.str"); Assert.NotNull(de2); string send = (string)de1.DefaultValue; string recv = (string)de2.DefaultValue; Assert.AreEqual("Hello World", send); Assert.AreEqual("Recv 11 bytes!", recv); }
public void UdpGetPropertyCrackTest() { string getproptemplate = @" <Peach> <DataModel name=""IPv4Addr""> <Number name=""Byte1"" size=""8"" /> <Number name=""Byte2"" size=""8""/> <Number name=""Byte3"" size=""8""/> <Number name=""Byte4"" size=""8""/> </DataModel> <StateModel name=""TheStateModel"" initialState=""InitialState""> <State name=""InitialState""> <Action name=""Addr"" type=""getProperty"" property=""LastRecvAddr""> <DataModel name=""LastRecvAddr"" ref=""IPv4Addr""/> </Action> </State> </StateModel> <Test name=""Default""> <StateModel ref=""TheStateModel""/> <Publisher class=""{0}""> <Param name=""Host"" value=""{1}""/> <Param name=""Port"" value=""{2}""/> <Param name=""SrcPort"" value=""{3}""/> </Publisher> <Strategy class=""RandomDeterministic""/> </Test> </Peach> "; SocketEcho echo = new SocketEcho(); echo.Start(IPAddress.Loopback); IPEndPoint ep = echo.Socket.LocalEndPoint as IPEndPoint; string xml = string.Format(getproptemplate, "Udp", IPAddress.Loopback, ep.Port, "0"); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(1, actions.Count); var addrb1 = actions[0].dataModel.find("Byte1").DefaultValue; Assert.NotNull(addrb1); Assert.AreEqual(addrb1.ToString(), "127"); var addrb2 = actions[0].dataModel.find("Byte2").DefaultValue; Assert.NotNull(addrb2); Assert.AreEqual(addrb2.ToString(), "0"); var addrb3 = actions[0].dataModel.find("Byte3").DefaultValue; Assert.NotNull(addrb3); Assert.AreEqual(addrb3.ToString(), "0"); var addrb4 = actions[0].dataModel.find("Byte4").DefaultValue; Assert.NotNull(addrb4); Assert.AreEqual(addrb4.ToString(), "1"); }
public void TestUdpNoPort() { ushort srcport = TestBase.MakePort(24000, 25000); string xml = @" <Peach> <DataModel name=""TheDataModel""> <String name=""str""/> </DataModel> <StateModel name=""TheStateModel"" initialState=""InitialState""> <State name=""InitialState""> <Action name=""Recv1"" type=""input""> <DataModel ref=""TheDataModel""/> </Action> <Action name=""Send1"" type=""output""> <DataModel ref=""TheDataModel""/> </Action> <Action name=""Recv2"" type=""input""> <DataModel ref=""TheDataModel""/> </Action> <Action name=""Recv3"" type=""input""> <DataModel ref=""TheDataModel""/> </Action> </State> </StateModel> <Test name=""Default""> <StateModel ref=""TheStateModel""/> <Publisher class=""Udp""> <Param name=""Host"" value=""127.0.0.1""/> <Param name=""SrcPort"" value=""{0}""/> </Publisher> </Test> </Peach> ".Fmt(srcport); this.cloneActions = true; SocketEcho echo1 = new SocketEcho() { WaitTime = 100 }; echo1.SendOnly(IPAddress.Loopback, srcport, "Echo1"); SocketEcho echo2 = new SocketEcho() { WaitTime = 66 }; echo2.SendOnly(IPAddress.Loopback, srcport, "Echo2"); try { PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.range = true; config.rangeStart = 1; config.rangeStop = 200; Engine e = new Engine(null); e.IterationFinished += new Engine.IterationFinishedEventHandler(e_IterationFinished); e.startFuzzing(dom, config); int num1 = 0; int num2 = 0; for (int i = 0; i < this.actions.Count; i += 4) { var exp = (string)actions[i + 0].dataModel[0].DefaultValue; if (exp != "Echo1") { Assert.AreEqual("Echo2", exp); ++num2; } else { ++num1; } Assert.AreEqual(exp, (string)actions[i + 2].dataModel[0].DefaultValue); Assert.AreEqual(exp, (string)actions[i + 3].dataModel[0].DefaultValue); } Assert.Greater(num1, 0); Assert.Greater(num2, 0); } finally { echo1.Socket.Close(); echo2.Socket.Close(); } }