C# Service causing "Invalid Data Type" errors in Wireshark trace. Query parameter appears to have strange characters

391 Views Asked by At

I want to start off by stating that I am not a network person, so I don't know how severe these warnings / errors are. The service that is running appears to be creating a bunch of "invalid data type" warnings which show up as "malformed packets" in the Wireshark trace. The WireShark trace is way too large to attach here, but I will post key components to it.

In Wireshark, when I click on "Expert Information", it shows me a list of packets. A certain "Warning" appears called "Invalid data type". When I expand this warning, there are a bunch of "Remote Procedure Call[Malformed Packet] / Protocol / TDS entries.

I click on the first one and it takes me directly to this packet in the trace. When there, it shows that a "Parameter" has an invalid length.

Name length: 62 Name: Name: \340\240\213@ENDTIME\342\250\200\340\240\207\350\274\240\341\204\276\346\225\226\340\254\276\344\200\211\344\270\200\345\224\200\344\264\200\345\220\200\345\210\200\344\204\200\344\270\200\345\214\200 Type info (Invalid data type: 00)

If I copy this "as printable text", it shows a bunch of random characters:

@ENDTIME* >Ve> @NUMTRANS& @NUMPAGES& @NUMCHECKS&@BATC

I don't know where the "* >Ve>" is coming from. It most certainly is not in the code.

If I back up to the first parameter passed in for this packet, it gives me the entire query that is causing the problem.

Length: 552 Data [truncated]: Insert Into stats.FFX_BATCHINFO(BATCHNUMBER, BATCHTYPE, SCANSTATIONID, SCANUSERID, STARTTIME, ENDTIME, NUMTRANS, NUMPAGES, NUMCHECKS, BATCHTOTAL) Values(@BATCHNUMBER, @BATCHTYPE, @SCANSTATIONID, @SCANUSERID, @STARTTIME,

I also noticed that the query above it stops at @STARTTIME. The very next parameter according to the code is @ENDTIME which is the parameter it appears to have a problem with.

The code for this query is as shown below:

string query = string.Format("Insert Into {0}(BATCHNUMBER, BATCHTYPE, SCANSTATIONID, SCANUSERID, STARTTIME, ENDTIME"
                                    + ", NUMTRANS, NUMPAGES, NUMCHECKS, BATCHTOTAL, SOLUTIONINTERNALID"
                                    + ")"
                                    + " Values(" + 
dbManager.ParamName("BATCHNUMBER") + ", " + dbManager.ParamName("BATCHTYPE") + ", " + dbManager.ParamName("SCANSTATIONID")
                                    + ", " + 
dbManager.ParamName("SCANUSERID") + ", " + dbManager.ParamName("STARTTIME") + ", " + dbManager.ParamName("ENDTIME")
                                    + ", " + 
dbManager.ParamName("NUMTRANS") + ", " + dbManager.ParamName("NUMPAGES") + ", " + dbManager.ParamName("NUMCHECKS")
                                     + ", " + dbManager.ParamName ("BATCHTOTAL") + ", " + dbManager.ParamName ("SOLUTIONINTERNALID")
                                    + ")", GlobalUtil.TableWithSchema ( "FFX_BATCHINFO"));

dbManager.OpenConnection();
dbManager.BeginTransaction();
IDbCommand idbCommand = null;

idbCommand = dbManager.GetCommand(CommandType.Text, query);

idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHNUMBER", DbType.String, batchInfo.BATCHNUMBER));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTYPE", DbType.String, batchInfo.BATCHTYPE));

idbCommand.Parameters.Add(dbManager.CreateParam("@SCANSTATIONID", DbType.String, batchInfo.SCAN_STATIONID));
idbCommand.Parameters.Add(dbManager.CreateParam("@SCANUSERID", DbType.String, batchInfo.SCAN_USERID));
idbCommand.Parameters.Add(dbManager.CreateParam("@STARTTIME", DbType.DateTime2, batchInfo.STARTTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@ENDTIME", DbType.DateTime2, batchInfo.ENDTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMTRANS", DbType.Int32, batchInfo.NUMTRANS));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMPAGES", DbType.Int32, batchInfo.NUMPAGES));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMCHECKS", DbType.Int32, batchInfo.NUMCHECKS));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTOTAL", DbType.Double, batchInfo.BATCHTOTAL));

idbCommand.Parameters.Add(dbManager.CreateParam("@SOLUTIONINTERNALID", DbType.Int64, batchInfo.SOLUTIONINTERNALID));

dbManager.ExecuteNonQuery();

dbManager.DisposeCommand();
dbManager.CommitTransaction();

So, I don't know how or where the random characters are getting attached to the parameter in the packet.

Any help would be appreciated.

Additional information:

  • Service is using .Net Framework 4.
  • The service runs on Windows Server 2012 R2.
  • The database it connects to is SQL Server 2014.
0

There are 0 best solutions below