1 # Unit and integration tests for traffic_packet.py
3 # Copyright (C) Catalyst IT Ltd. 2017
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
23 from samba.auth import system_session
25 from samba.credentials import MUST_USE_KERBEROS, DONT_USE_KERBEROS
26 from samba.emulate import traffic_packets as p
27 from samba.emulate import traffic
29 from samba.samdb import SamDB
33 class TrafficEmulatorPacketTests(samba.tests.TestCase):
35 super(TrafficEmulatorPacketTests, self).setUp()
36 self.server = os.environ["SERVER"]
37 self.domain = os.environ["DOMAIN"]
38 self.host = os.environ["SERVER_IP"]
39 self.lp = self.get_loadparm()
40 self.session = system_session()
41 self.credentials = self.get_credentials()
43 self.ldb = SamDB(url="ldap://%s" % self.host,
44 session_info=self.session,
45 credentials=self.credentials,
47 self.domain_sid = self.ldb.get_domain_sid()
49 traffic.clean_up_accounts(self.ldb, 1)
50 self.tempdir = tempfile.mkdtemp(prefix="traffic_packet_test_")
51 self.context = traffic.ReplayContext(server=self.server,
53 creds=self.credentials,
55 ou=traffic.ou_name(self.ldb, 1),
56 domain_sid=self.domain_sid)
58 self.conversation = traffic.Conversation()
59 self.conversation.conversation_id = 1
60 self.machinename = "STGM-1-1"
61 self.machinepass = samba.generate_random_password(32, 32)
62 self.username = "STGU-1-1"
63 self.userpass = samba.generate_random_password(32, 32)
64 account = traffic.ConversationAccounts(
70 traffic.create_ou(self.ldb, 1)
71 traffic.create_machine_account(self.ldb,
75 traffic.create_user_account(self.ldb,
80 self.context.generate_process_local_config(account, self.conversation)
83 super(TrafficEmulatorPacketTests, self).tearDown()
84 traffic.clean_up_accounts(self.ldb, 1)
85 shutil.rmtree(self.tempdir)
87 def test_packet_cldap_03(self):
88 packet = traffic.Packet("0.0\t11\t1\t2\t1\tcldap\t3\tsearchRequest\t")
89 self.assertTrue(p.packet_cldap_3(packet,
93 def test_packet_cldap_05(self):
94 packet = traffic.Packet("0.0\t11\t1\t1\t2\tcldap\t5\tsearchResDone\t")
95 self.assertFalse(p.packet_cldap_5(packet,
99 def test_packet_dcerpc_00(self):
100 packet = traffic.Packet("0.0\t11\t1\t2\t1\tdcerpc\t0\tRequest\t")
101 self.assertFalse(p.packet_dcerpc_0(packet,
105 def test_packet_dcerpc_02(self):
106 packet = traffic.Packet("0.0\t11\t1\t1\t2\tdcerpc\t2\tResponse\t")
107 self.assertFalse(p.packet_dcerpc_2(packet,
111 def test_packet_dcerpc_03(self):
112 packet = traffic.Packet("0.0\t11\t1\t1\t2\tdcerpc\t3\t\t")
113 self.assertFalse(p.packet_dcerpc_3(packet,
117 def test_packet_dcerpc_11(self):
118 packet = traffic.Packet("0.0\t11\t1\t2\t1\tdcerpc\t11\tBind\t")
119 self.assertFalse(p.packet_dcerpc_11(packet,
123 def test_packet_dcerpc_13(self):
124 packet = traffic.Packet("0.0\t11\t1\t2\t1\tdcerpc\t13\t\t")
125 self.assertFalse(p.packet_dcerpc_13(packet,
129 def test_packet_dcerpc_14(self):
130 packet = traffic.Packet(
131 "0.0\t11\t1\t2\t1\tdcerpc\t14\tAlter_context\t")
132 self.assertFalse(p.packet_dcerpc_14(packet,
136 def test_packet_dcerpc_15(self):
137 packet = traffic.Packet(
138 "0.0\t11\t1\t1\t2\tdcerpc\t15\tAlter_context_resp\t")
139 # Set user_creds MUST_USE_KERBEROS to suppress the warning message.
140 self.context.user_creds.set_kerberos_state(MUST_USE_KERBEROS)
141 self.assertFalse(p.packet_dcerpc_15(packet,
145 def test_packet_dcerpc_16(self):
146 packet = traffic.Packet(
147 "0.0\t11\t1\t1\t2\tdcerpc\t16\tAUTH3\t")
148 self.assertFalse(p.packet_dcerpc_16(packet,
152 def test_packet_dns_01(self):
153 packet = traffic.Packet(
154 "0.0\t11\t1\t1\t2\tdns\t1\tresponse\t")
155 self.assertFalse(p.packet_dns_1(packet,
159 def test_packet_drsuapi_00(self):
160 packet = traffic.Packet(
161 "0.0\t06\t1\t1\t2\tdrsuapi\t0\tDsBind\t")
162 self.assertTrue(p.packet_drsuapi_0(packet,
166 def test_packet_drsuapi_01(self):
167 packet = traffic.Packet(
168 "0.0\t06\t1\t1\t2\tdrsuapi\t1\tDsUnBind\t")
169 self.assertTrue(p.packet_drsuapi_1(packet,
173 def test_packet_drsuapi_02(self):
174 packet = traffic.Packet(
175 "0.0\t06\t1\t1\t2\tdrsuapi\t2\tDsReplicaSync\t")
176 self.assertFalse(p.packet_drsuapi_2(packet,
180 def test_packet_drsuapi_03(self):
181 packet = traffic.Packet(
182 "0.0\t06\t1\t1\t2\tdrsuapi\t3\tDsGetNCChanges\t")
183 self.assertFalse(p.packet_drsuapi_3(packet,
187 def test_packet_drsuapi_04(self):
188 packet = traffic.Packet(
189 "0.0\t06\t1\t1\t2\tdrsuapi\t4\tDsReplicaUpdateRefs\t")
190 self.assertFalse(p.packet_drsuapi_4(packet,
194 def test_packet_drsuapi_12(self):
195 packet = traffic.Packet(
196 "0.0\t06\t1\t1\t2\tdrsuapi\t12\tDsCrackNames\t")
197 self.assertTrue(p.packet_drsuapi_12(packet,
201 def test_packet_drsuapi_13(self):
202 packet = traffic.Packet(
203 "0.0\t06\t1\t1\t2\tdrsuapi\t13\tDsWriteAccountSpn\t")
204 self.assertTrue(p.packet_drsuapi_13(packet,
208 def test_packet_epm_03(self):
209 packet = traffic.Packet(
210 "0.0\t06\t1\t1\t2\tepm\t3\tMap\t")
211 self.assertFalse(p.packet_epm_3(packet,
215 def test_packet_kerberos(self):
216 """Kerberos packets are not generated, but are used as a hint to
219 packet = traffic.Packet(
220 "0.0\t11\t1\t1\t2\tkerberos\t\t\t")
221 self.assertFalse(p.packet_kerberos_(packet,
224 self.assertEqual(MUST_USE_KERBEROS,
225 self.context.user_creds.get_kerberos_state())
226 self.assertEqual(MUST_USE_KERBEROS,
227 self.context.user_creds_bad.get_kerberos_state())
228 self.assertEqual(MUST_USE_KERBEROS,
229 self.context.machine_creds.get_kerberos_state())
230 self.assertEqual(MUST_USE_KERBEROS,
231 self.context.machine_creds_bad.get_kerberos_state())
232 self.assertEqual(MUST_USE_KERBEROS,
233 self.context.creds.get_kerberos_state())
235 # Need to restore kerberos creds on the admin creds otherwise
236 # subsequent tests fail
237 self.credentials.set_kerberos_state(DONT_USE_KERBEROS)
239 def test_packet_ldap(self):
240 packet = traffic.Packet(
241 "0.0\t06\t1\t1\t2\tldap\t\t*** Unknown ***\t")
242 self.assertFalse(p.packet_ldap_(packet,
246 def test_packet_ldap_00_sasl(self):
247 packet = traffic.Packet(
248 "0.0\t06\t1\t2\t1\tldap\t0\tbindRequest"
249 "\t\t\t\t\t3\tsasl\t1.3.6.1.5.5.2")
250 self.assertTrue(p.packet_ldap_0(packet,
254 def test_packet_ldap_00_simple(self):
255 packet = traffic.Packet(
256 "0.0\t06\t1\t2\t1\tldap\t0\tbindRequest"
257 "\t\t\t\t\t0\tsimple\t")
258 self.assertTrue(p.packet_ldap_0(packet,
262 def test_packet_ldap_01(self):
263 packet = traffic.Packet(
264 "0.0\t06\t1\t1\t2\tldap\t1\tbindResponse\t")
265 self.assertFalse(p.packet_ldap_1(packet,
269 def test_packet_ldap_02(self):
270 packet = traffic.Packet(
271 "0.0\t06\t1\t2\t1\tldap\t2\tunbindRequest\t")
272 self.assertFalse(p.packet_ldap_2(packet,
276 def test_packet_ldap_03(self):
277 packet = traffic.Packet(
278 "0.0\t06\t1\t2\t1\tldap\t3\tsearchRequest"
279 "\t2\tDC,DC\t\tcn\t\t\t")
280 self.assertTrue(p.packet_ldap_3(packet,
284 def test_packet_ldap_04(self):
285 packet = traffic.Packet(
286 "0.0\t06\t1\t1\t2\tldap\t4\tsearchResEntry\t")
287 self.assertFalse(p.packet_ldap_4(packet,
291 def test_packet_ldap_05(self):
292 packet = traffic.Packet(
293 "0.0\t06\t1\t1\t2\tldap\t5\tsearchResDone\t")
294 self.assertFalse(p.packet_ldap_5(packet,
298 def test_packet_ldap_06(self):
299 packet = traffic.Packet(
300 "0.0\t06\t1\t2\t1\tldap\t6\tmodifyRequest\t"
302 self.assertFalse(p.packet_ldap_6(packet,
306 def test_packet_ldap_07(self):
307 packet = traffic.Packet(
308 "0.0\t06\t1\t1\t2\tldap\t7\tmodifyResponse\t")
309 self.assertFalse(p.packet_ldap_7(packet,
313 def test_packet_ldap_08(self):
314 packet = traffic.Packet(
315 "0.0\t06\t1\t2\t1\tldap\t8\taddRequest\t")
316 self.assertFalse(p.packet_ldap_8(packet,
320 def test_packet_ldap_09(self):
321 packet = traffic.Packet(
322 "0.0\t06\t1\t1\t2\tldap\t9\taddResponse\t")
323 self.assertFalse(p.packet_ldap_9(packet,
327 def test_packet_ldap_16(self):
328 packet = traffic.Packet(
329 "0.0\t06\t1\t2\t1\tldap\t16\tabandonRequest\t")
330 self.assertFalse(p.packet_ldap_16(packet,
334 def test_packet_lsarpc_00(self):
335 packet = traffic.Packet(
336 "0.0\t06\t1\t2\t1\tlsarpc\t0\tlsa_Close\t")
337 self.assertFalse(p.packet_lsarpc_1(packet,
341 def test_packet_lsarpc_01(self):
342 packet = traffic.Packet(
343 "0.0\t06\t1\t2\t1\tlsarpc\t1\tlsa_Delete\t")
344 self.assertFalse(p.packet_lsarpc_1(packet,
348 def test_packet_lsarpc_02(self):
349 packet = traffic.Packet(
350 "0.0\t06\t1\t2\t1\tlsarpc\t2\tlsa_EnumeratePrivileges\t")
351 self.assertFalse(p.packet_lsarpc_2(packet,
355 def test_packet_lsarpc_03(self):
356 packet = traffic.Packet(
357 "0.0\t06\t1\t2\t1\tlsarpc\t3\tlsa_QuerySecurityObject\t")
358 self.assertFalse(p.packet_lsarpc_3(packet,
362 def test_packet_lsarpc_04(self):
363 packet = traffic.Packet(
364 "0.0\t06\t1\t2\t1\tlsarpc\t4\tlsa_SetSecurityObject\t")
365 self.assertFalse(p.packet_lsarpc_4(packet,
369 def test_packet_lsarpc_05(self):
370 packet = traffic.Packet(
371 "0.0\t06\t1\t2\t1\tlsarpc\t5\tlsa_ChangePassword\t")
372 self.assertFalse(p.packet_lsarpc_5(packet,
376 def test_packet_lsarpc_06(self):
377 packet = traffic.Packet(
378 "0.0\t06\t1\t2\t1\tlsarpc\t6\tlsa_OpenPolicy\t")
379 self.assertFalse(p.packet_lsarpc_6(packet,
383 def test_packet_lsarpc_14(self):
384 packet = traffic.Packet(
385 "0.0\t06\t1\t2\t1\tlsarpc\t14\tlsa_LookupNames\t")
386 self.assertTrue(p.packet_lsarpc_14(packet,
390 def test_packet_lsarpc_15(self):
391 packet = traffic.Packet(
392 "0.0\t06\t1\t2\t1\tlsarpc\t15\tlsa_LookupSids\t")
393 self.assertTrue(p.packet_lsarpc_15(packet,
397 def test_packet_lsarpc_39(self):
398 packet = traffic.Packet(
399 "0.0\t06\t1\t2\t1\tlsarpc\t39\tlsa_QueryTrustedDomainInfoBySid\t")
400 self.assertTrue(p.packet_lsarpc_39(packet,
404 def test_packet_lsarpc_40(self):
405 packet = traffic.Packet(
406 "0.0\t06\t1\t2\t1\tlsarpc\t40\tlsa_SetTrustedDomainInfo\t")
407 self.assertFalse(p.packet_lsarpc_40(packet,
411 def test_packet_lsarpc_43(self):
412 packet = traffic.Packet(
413 "0.0\t06\t1\t2\t1\tlsarpc\t43\tlsa_StorePrivateData\t")
414 self.assertFalse(p.packet_lsarpc_43(packet,
418 def test_packet_lsarpc_44(self):
419 packet = traffic.Packet(
420 "0.0\t06\t1\t2\t1\tlsarpc\t44\tlsa_RetrievePrivateData\t")
421 self.assertFalse(p.packet_lsarpc_44(packet,
425 def test_packet_lsarpc_68(self):
426 packet = traffic.Packet(
427 "0.0\t06\t1\t2\t1\tlsarpc\t68\tlsa_LookupNames3\t")
428 self.assertFalse(p.packet_lsarpc_68(packet,
432 def test_packet_lsarpc_76(self):
433 packet = traffic.Packet(
434 "0.0\t06\t1\t2\t1\tlsarpc\t76\tlsa_LookupSids3\t")
435 self.assertTrue(p.packet_lsarpc_76(packet,
439 def test_packet_lsarpc_77(self):
440 packet = traffic.Packet(
441 "0.0\t06\t1\t2\t1\tlsarpc\t77\tlsa_LookupNames4\t")
442 self.assertTrue(p.packet_lsarpc_77(packet,
446 def test_packet_nbns_00(self):
447 packet = traffic.Packet(
448 "0.0\t06\t1\t2\t1\tnbns\t0\tquery\t")
449 self.assertTrue(p.packet_nbns_0(packet,
453 def test_packet_nbns_01(self):
454 packet = traffic.Packet(
455 "0.0\t06\t1\t1\t2\tnbns\t1\tresponse\t")
456 self.assertTrue(p.packet_nbns_0(packet,
460 def test_packet_rpc_netlogon_00(self):
461 packet = traffic.Packet(
462 "0.0\t06\t1\t2\t1\trpc_netlogon\t0\tNetrLogonUasLogon\t")
463 self.assertFalse(p.packet_rpc_netlogon_0(packet,
467 def test_packet_rpc_netlogon_01(self):
468 packet = traffic.Packet(
469 "0.0\t06\t1\t2\t1\trpc_netlogon\t1\tNetrLogonUasLogoff\t")
470 self.assertFalse(p.packet_rpc_netlogon_1(packet,
474 def test_packet_rpc_netlogon_04(self):
475 packet = traffic.Packet(
476 "0.0\t06\t1\t2\t1\trpc_netlogon\t4\tNetrServerReqChallenge\t")
477 self.assertFalse(p.packet_rpc_netlogon_4(packet,
481 def test_packet_rpc_netlogon_14(self):
482 packet = traffic.Packet(
483 "0.0\t06\t1\t2\t1\trpc_netlogon\t14\tNetrLogonControl2\t")
484 self.assertFalse(p.packet_rpc_netlogon_14(packet,
488 def test_packet_rpc_netlogon_15(self):
489 packet = traffic.Packet(
490 "0.0\t06\t1\t2\t1\trpc_netlogon\t15\tNetrServerAuthenticate2\t")
491 self.assertFalse(p.packet_rpc_netlogon_15(packet,
495 def test_packet_rpc_netlogon_21(self):
496 packet = traffic.Packet(
497 "0.0\t06\t1\t2\t1\trpc_netlogon\t21\tNetrLogonDummyRoutine1\t")
498 self.assertFalse(p.packet_rpc_netlogon_21(packet,
502 def test_packet_rpc_netlogon_26(self):
503 packet = traffic.Packet(
504 "0.0\t06\t1\t2\t1\trpc_netlogon\t26\tNetrServerAuthenticate3\t")
505 self.assertFalse(p.packet_rpc_netlogon_26(packet,
509 def test_packet_rpc_netlogon_29(self):
510 packet = traffic.Packet(
511 "0.0\t06\t1\t2\t1\trpc_netlogon\t29\tNetrLogonGetDomainInfo\t")
512 self.assertTrue(p.packet_rpc_netlogon_29(packet,
516 def test_packet_rpc_netlogon_30(self):
517 packet = traffic.Packet(
518 "0.0\t06\t1\t2\t1\trpc_netlogon\t30\tNetrServerPasswordSet2\t")
519 self.assertTrue(p.packet_rpc_netlogon_30(packet,
523 def test_packet_rpc_netlogon_34(self):
524 packet = traffic.Packet(
525 "0.0\t06\t1\t2\t1\trpc_netlogon\t34\tDsrGetDcNameEx2\t")
526 self.assertFalse(p.packet_rpc_netlogon_34(packet,
530 def test_packet_rpc_netlogon_39(self):
531 packet = traffic.Packet(
532 "0.0\t06\t1\t2\t1\trpc_netlogon\t39\tNetrLogonSamLogonEx\t")
533 self.assertTrue(p.packet_rpc_netlogon_39(packet,
537 def test_packet_rpc_netlogon_40(self):
538 packet = traffic.Packet(
539 "0.0\t06\t1\t2\t1\trpc_netlogon\t40\tDsrEnumerateDomainTrusts\t")
540 self.assertTrue(p.packet_rpc_netlogon_40(packet,
544 def test_packet_rpc_netlogon_45(self):
545 packet = traffic.Packet(
546 "0.0\t06\t1\t2\t1\trpc_netlogon\t45\tNetrLogonSamLogonWithFlags\t")
547 self.assertTrue(p.packet_rpc_netlogon_45(packet,
551 def test_packet_samr_00(self):
552 packet = traffic.Packet(
553 "0.0\t06\t1\t2\t1\tsamr\t0\tConnect\t")
554 self.assertTrue(p.packet_samr_0(packet,
558 def test_packet_samr_01(self):
559 packet = traffic.Packet(
560 "0.0\t06\t1\t2\t1\tsamr\t1\tClose\t")
561 self.assertTrue(p.packet_samr_1(packet,
565 def test_packet_samr_03(self):
566 packet = traffic.Packet(
567 "0.0\t06\t1\t2\t1\tsamr\t3\tQuerySecurity\t")
568 self.assertTrue(p.packet_samr_3(packet,
572 def test_packet_samr_05(self):
573 packet = traffic.Packet(
574 "0.0\t06\t1\t2\t1\tsamr\t5\tLookupDomain\t")
575 self.assertTrue(p.packet_samr_5(packet,
579 def test_packet_samr_06(self):
580 packet = traffic.Packet(
581 "0.0\t06\t1\t2\t1\tsamr\t6\tEnumDomains\t")
582 self.assertTrue(p.packet_samr_6(packet,
586 def test_packet_samr_07(self):
587 packet = traffic.Packet(
588 "0.0\t06\t1\t2\t1\tsamr\t7\tOpenDomain\t")
589 self.assertTrue(p.packet_samr_7(packet,
593 def test_packet_samr_08(self):
594 packet = traffic.Packet(
595 "0.0\t06\t1\t2\t1\tsamr\t8\tQueryDomainInfo'\t")
596 self.assertTrue(p.packet_samr_8(packet,
600 def test_packet_samr_14(self):
601 packet = traffic.Packet(
602 "0.0\t06\t1\t2\t1\tsamr\t14\tCreateDomAlias\t")
603 self.assertFalse(p.packet_samr_14(packet,
607 def test_packet_samr_15(self):
608 packet = traffic.Packet(
609 "0.0\t06\t1\t2\t1\tsamr\t15\tEnumDomainAliases\t")
610 self.assertTrue(p.packet_samr_15(packet,
614 def test_packet_samr_16(self):
615 packet = traffic.Packet(
616 "0.0\t06\t1\t2\t1\tsamr\t16\tGetAliasMembership\t")
617 self.assertTrue(p.packet_samr_16(packet,
621 def test_packet_samr_17(self):
622 packet = traffic.Packet(
623 "0.0\t06\t1\t2\t1\tsamr\t17\tLookupNames\t")
624 self.assertTrue(p.packet_samr_17(packet,
628 def test_packet_samr_18(self):
629 packet = traffic.Packet(
630 "0.0\t06\t1\t2\t1\tsamr\t18\tLookupRids\t")
631 self.assertTrue(p.packet_samr_18(packet,
635 def test_packet_samr_19(self):
636 packet = traffic.Packet(
637 "0.0\t06\t1\t2\t1\tsamr\t19\tOpenGroup\t")
638 self.assertTrue(p.packet_samr_19(packet,
642 def test_packet_samr_25(self):
643 packet = traffic.Packet(
644 "0.0\t06\t1\t2\t1\tsamr\t25\tQueryGroupMember\t")
645 self.assertTrue(p.packet_samr_25(packet,
649 def test_packet_samr_34(self):
650 packet = traffic.Packet(
651 "0.0\t06\t1\t2\t1\tsamr\t34\tOpenUser\t")
652 self.assertTrue(p.packet_samr_34(packet,
656 def test_packet_samr_36(self):
657 packet = traffic.Packet(
658 "0.0\t06\t1\t2\t1\tsamr\t36\tQueryUserInfo\t")
659 self.assertTrue(p.packet_samr_36(packet,
663 def test_packet_samr_37(self):
664 packet = traffic.Packet(
665 "0.0\t06\t1\t2\t1\tsamr\t37\tSetUserInfo\t")
666 self.assertFalse(p.packet_samr_37(packet,
670 def test_packet_samr_39(self):
671 packet = traffic.Packet(
672 "0.0\t06\t1\t2\t1\tsamr\t39\tGetGroupsForUser\t")
673 self.assertTrue(p.packet_samr_39(packet,
677 def test_packet_samr_40(self):
678 packet = traffic.Packet(
679 "0.0\t06\t1\t2\t1\tsamr\t40\tQueryDisplayInfo\t")
680 self.assertFalse(p.packet_samr_40(packet,
684 def test_packet_samr_44(self):
685 packet = traffic.Packet(
686 "0.0\t06\t1\t2\t1\tsamr\t44\tGetUserPwInfo\t")
687 self.assertFalse(p.packet_samr_44(packet,
691 def test_packet_samr_57(self):
692 packet = traffic.Packet(
693 "0.0\t06\t1\t2\t1\tsamr\t57\tConnect2\t")
694 self.assertTrue(p.packet_samr_57(packet,
698 def test_packet_samr_64(self):
699 packet = traffic.Packet(
700 "0.0\t06\t1\t2\t1\tsamr\t64\tConnect5\t")
701 self.assertTrue(p.packet_samr_64(packet,
705 def test_packet_samr_68(self):
706 packet = traffic.Packet(
707 "0.0\t06\t1\t2\t1\tsamr\t68\t\t")
708 self.assertFalse(p.packet_samr_68(packet,
712 def test_packet_srvsvc_16(self):
713 packet = traffic.Packet(
714 "0.0\t06\t1\t2\t1\tsrvsvc\t16\tNetShareGetInfo\t")
715 self.assertTrue(p.packet_srvsvc_16(packet,
719 def test_packet_srvsvc_21(self):
720 packet = traffic.Packet(
721 "0.0\t06\t1\t2\t1\tsrvsvc\t21\tNetSrvGetInfo\t")
722 self.assertTrue(p.packet_srvsvc_21(packet,