A_Prn_Barcode 应用code128码的 注意事项

   code128码是全字符状态下压缩比例比较高的编码了,所以在应用中大家都喜欢用它,但对于不同的编码还要要区分一下比较好,毕竟它还有3个子集(A,B,C),灵活的应用可以更高效的提高条码的效率和压缩比。

   本人在使用中原本要打印的规格 为“JB-13010001-001”,采用该编码发现条码太长,缩短比例后达到要求,但扫描枪扫描非常费力,毕竟只是一般的扫描枪,买高级的提高成本,所以只能在条码上做文章了,还好这个编码是刚要执行的,所以沟通后要更改编码规则,毕竟公司也不想提高成本,所以把规则该为全数字型“0013010001001”,这样就OK了,但打印后发现没有变化,郁闷的不得了,把打印结果输出到文件后分析,才发现原来PPLA的A_Prn_Barcode打印默认为B子集,知道原因就好解决了,把打印更改为C子集,

打印效果符合条件,并且扫描效果不是非常不错,不再费力。

下面把更改方法告之大家,本来PPLA说明中就有说明的:

     A_Prn_Barcode

             Example: subset = B
                      barcode data = "Bar code"
                      output = "BBar code"

如果要打印C子集,请在要打印的字串前添加“C”字符,这样系统就会采用C子集方式打印。

 如要打印C开头的字串,当然此时已经不是C子集范畴了,直接加“A”或“B”就OK了。


附件USB接口的条码测试程序(供大家参考):

unit BarCodeDll;

interface

Procedure PrintLabel(LPT,JBCStr:string;PageNum:integer);
Procedure PrintLabel6(LPT,JBCStr1,JBCStr2,JBCStr3,JBCStr4,JBCStr5,JBCStr6:string);
Procedure PrintLabel_test(LPT,JBCStr:string;A,B:integer);

var
  PrintServer:String;

implementation

    var dpCrLf : AnsiString = chr(13)+chr(10);
    var szSavePath : String = 'C:\Argox';
    var szSaveFile : AnsiString = 'C:\Argox\PPLA_Example.Prn';
    var sznop1     : AnsiString = 'nop_front' + Chr(13) + chr(10);
    var sznop2     : AnsiString = 'nop_middle' + Chr(13) + chr(10);
    function  A_Bar2d_Maxi(x:integer; y:integer; primary:integer; secondary:integer; country:integer;
              service:integer; mode:char; numeric:integer; data:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Bar2d_Maxi_Ori(x:integer; y:integer; ori:integer; primary:integer; secondary:integer;
              country:integer; service:integer; mode:char; numeric:integer; data:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Bar2d_PDF417(x:integer; y:integer; narrow:integer; width:integer; normal:char;
              security:integer; aspect:integer; row:integer; column:integer; mode:char;
              numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Bar2d_PDF417_Ori(x:integer; y:integer; ori:integer; narrow:integer; width:integer;
              normal:char; security:integer; aspect:integer; row:integer; column:integer; mode:char;
              numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Bar2d_DataMatrix(x:integer; y:integer; rotation:integer; hor_mul:integer;
              ver_mul:integer; ECC:integer; data_format:integer; num_rows:integer; num_col:integer;
              mode:char; numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    Procedure A_Clear_Memory();stdcall;external 'WINPPLA.DLL';
    Procedure A_ClosePrn();stdcall;external 'WINPPLA.DLL';
    function  A_CreatePrn(selection:integer; filename:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Del_Graphic(mem_mode:integer; graphic:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Draw_Box(mode:char; x:integer; y:integer; width:integer; height:integer; top:integer;
              side:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Draw_Line(mode:char; x:integer; y:integer; width:integer; height:integer):integer;
              stdcall;external 'WINPPLA.DLL';
    Procedure A_Feed_Label();stdcall;external 'WINPPLA.DLL';
    function  A_Get_DLL_Version(nShowMessage:integer):PAnsiChar;stdcall;external 'WINPPLA.DLL';
    function  A_Get_DLL_VersionA(nShowMessage:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Get_Graphic(x:integer; y:integer; mem_mode:integer; format:char; filename:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Get_Graphic_ColorBMP(x:integer; y:integer; mem_mode:integer; format:char;
              filename:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Get_Graphic_ColorBMPEx(x:integer; y:integer; nWidth:integer; nHeight:integer;
              rotate:integer; mem_mode:integer; format:char; id_name:AnsiString; filename:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
//    function  A_Get_Graphic_ColorBMP_HBitmap(x:integer; y:integer; nWidth:integer; nHeight:integer;
//              rotate:integer; mem_mode:integer; format:char; id_name:AnsiString; hbm:HBITMAP):integer;
//              stdcall;external 'WINPPLA.DLL';
    function  A_Initial_Setting(Type_Renamed:integer; Source:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_WriteData(IsImmediate:integer; pbuf:AnsiString; length:integer):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_ReadData(pbuf:PAnsiChar; length:integer; dwTimeoutms:integer):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Load_Graphic(x:integer; y:integer; graphic_name:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Open_ChineseFont(path:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Print_Form(width:integer; height:integer; copies:integer; amount:integer;
              form_name:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Print_Out(width:integer; height:integer; copies:integer; amount:integer):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Barcode(x:integer; y:integer; ori:integer; type_Renamed:char; narrow:integer;
              width:integer; height:integer; mode:char; numeric:integer; data:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text(x:integer; y:integer; ori:integer; font:integer; type_Renamed:integer;
              hor_factor:integer; ver_factor:integer; mode:char; numeric:integer; data:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_Chinese(x:integer; y:integer; fonttype:integer; id_name:AnsiString; data:AnsiString;
              mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_TrueType(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
              FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
              data:AnsiString; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_TrueType_W(x:integer; y:integer; FHeight:integer; FWidth:integer;
              FType:AnsiString; Fspin:integer; FWeight:integer; FItalic:integer; FUnline:integer;
              FStrikeOut:integer; id_name:AnsiString; data:AnsiString; mem_mode:integer):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Set_Backfeed(back:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_BMPSave(nSave:integer; pstrBMPFName:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Set_Cutting(cutting:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Darkness(heat:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_DebugDialog(nEnable:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Feed(rate:char):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Form(formfile:AnsiString; form_name:AnsiString; mem_mode:integer):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Set_Margin(position:integer; margin:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Prncomport(baud:integer; parity:integer; data:integer; stop:integer):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Set_Prncomport_PC(nBaudRate:integer; nByteSize:integer; nParity:integer;
              nStopBits:integer; nDsr:integer; nCts:integer; nXonXoff:integer):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Set_Sensor_Mode(type_Renamed:char; continuous:integer):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Set_Speed(speed:char):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Syssetting(transfer:integer; cut_peel:integer; length:integer; zero:integer;
              pause:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Unit(unit_Renamed:char):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Gap(gap:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_Logic(logic:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_ProcessDlg(nShow:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_LabelVer(centiInch:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_GetUSBBufferLen():integer;stdcall;external 'WINPPLA.DLL';
    function  A_EnumUSB(buf:PAnsiChar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_CreateUSBPort(nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_CreatePort(nPortType:integer; nPort:integer; filename:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Clear_MemoryEx(nMode:integer):integer;stdcall;external 'WINPPLA.DLL';
    Procedure A_Set_Mirror();stdcall;external 'WINPPLA.DLL';
    function  A_Bar2d_RSS(x:integer; y:integer; ori:integer; ratio:integer; height:integer;
              rtype:char; mult:integer; seg:integer; data1:AnsiString; data2:AnsiString):integer;stdcall;
              external 'WINPPLA.DLL';
    function  A_Bar2d_QR_M(x:integer; y:integer; ori:integer; mult:char; value:integer; model:integer;
              error:char; mask:integer; dinput:char; mode:char; numeric:integer; data:AnsiString):integer;
              stdcall;external 'WINPPLA.DLL';
    function  A_Bar2d_QR_A(x:integer; y:integer; ori:integer; mult:char; value:integer; mode:char;
              numeric:integer; data:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_GetNetPrinterBufferLen():integer;stdcall;external 'WINPPLA.DLL';
    function  A_EnumNetPrinter(buf:PAnsiChar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_CreateNetPort(nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_TrueType_Uni(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
              FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
              data:PWideChar; format:integer; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_TrueType_UniB(x:integer; y:integer; FSize:integer; FType:AnsiString; Fspin:integer;
              FWeight:integer; FItalic:integer; FUnline:integer; FStrikeOut:integer; id_name:AnsiString;
              data:PWideChar; format:integer ; mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_GetUSBDeviceInfo(nPort:integer; pDeviceName:PAnsiChar; pDeviceNameLen:PInteger;
              pDevicePath:PAnsiChar; pDevicePathLen:PInteger):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Set_EncryptionKey(encryptionKey:AnsiString):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Check_EncryptionKey(decodeKey:AnsiString; encryptionKey:AnsiString;
              dwTimeoutms:integer):integer;stdcall;external 'WINPPLA.DLL';
{
    function  A_Set_Darkness ( darkness:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_GetUSBBufferLen():integer;stdcall;external 'WINPPLA.DLL';
    function  A_EnumUSB      ( buf:string):integer;stdcall;external 'WINPPLA.DLL';
    function  A_CreatePrn    ( selection:integer;FileName:pchar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_CreateUSBPort( nPort:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Print_Out    ( width,height,copies,amount:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text     ( x,y,ori,font,typee,hor_factor,ver_factor:integer;mode:char;numeric:integer;data:pchar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Barcode  ( x,y,ori:integer;typee:char;narrow,width,height:integer;mode:char;numeric:integer;data:pchar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_TrueType ( x,y,FSize:integer;FType:pchar;Fspin,FWeight,FItalic,FUnline,FStrikeOut:integer;id_name,data:pchar;mem_mode:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Prn_Text_Chinese(x,y,ori:integer;str1,str2:pchar;mode:integer):integer;stdcall;external 'WINPPLA.DLL';
//     (100, 140, 0,'A01','国家利益当前AbCcDd', 1);
    function  A_Get_Graphic  ( x,y,mem_mode:integer;format:char;filename:pchar):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Draw_Box     ( mode, x, y, width, height, top, side:integer):integer;stdcall;external 'WINPPLA.DLL';
    function  A_Draw_Line    (mode, x, y, width, height:integer):integer;stdcall;external 'WINPPLA.DLL';
    Procedure A_ClosePrn     ();stdcall;external 'WINPPLA.DLL';
}
Procedure PrintLabel(LPT,JBCStr:string;PageNum:integer);
var
     ret,nLen,sw : integer;
     pbuf : array[0..127] of AnsiChar;
     ver : PAnsiChar;
     strmsg : string;
     len1,len2 : integer;
     buf1,buf2 : AnsiString;
     buff1 : array[0..127] of WideChar;
     //himage : HBITMAP;
  buf,_TmpDN:string;
begin
     _TmpDN:=JBCStr;
     // Test code start
     // open port.
     // dll version.
     ver := A_Get_DLL_Version(0);
     A_CreatePrn(0,'d:\out.prn');

     // search port.
     nLen := A_GetUSBBufferLen() + 1;
     strmsg := 'DLL ' + ver + dpCrLf;   // only sample coding, not smart.
     If nLen > 1 then
     begin
         len1 := 128;
         len2 := 128;
         SetLength(buf1,len1);
         SetLength(buf2,len2);
         A_EnumUSB(pbuf);
         A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
         sw := 1;
         If 0 < sw then
                ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
         else
                ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
         If 0 < ret then
             strmsg := strmsg + 'Open USB fail!'
         else
         begin
             SetLength(buf1,len1);
             SetLength(buf2,len2);
             strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
             strmsg := strmsg + buf1;
             strmsg := strmsg + dpCrLf+ 'Device path: ';
             strmsg := strmsg + buf2;
             //sw := 2;
             If 2 = sw then
             begin
                //get printer status.
                pbuf[0] := #$01;
                pbuf[1] := #$46;
                pbuf[2] := #$0D;
                pbuf[3] := #$0A;
                A_WriteData(1, pbuf, 4);   //<SOH>F
                ret := A_ReadData(pbuf, 2, 1000);
             end;
         end;
     end
     else
     begin
         CreateDirectory(PChar(szSavePath), nil);
         ret := A_CreatePrn(0, szSaveFile);   // open file.
         strmsg := strmsg + 'Open ' + szSaveFile;
         if 0 < ret then
             strmsg := strmsg + ' file fail!'
         else
             strmsg := strmsg + ' file succeed!';
     end;
     //ShowMessage(strmsg);
     If 0 < ret then
         exit;
     /

       A_Set_Darkness(18);

     A_Prn_Barcode(52,  47, 1, 'E', 2, 4, 40, 'N', 0, pchar('C'+_TmpDN));
     A_Print_Out(1, 1, PageNum,1);
     A_ClosePrn;
end;

Procedure PrintLabel_test(LPT,JBCStr:string;A,B:integer);
var
     ret,nLen,sw : integer;
     pbuf : array[0..127] of AnsiChar;
     ver : PAnsiChar;
     strmsg : string;
     len1,len2 : integer;
     buf1,buf2 : AnsiString;
     buff1 : array[0..127] of WideChar;
     //himage : HBITMAP;
  buf,_TmpDN:string;
begin
     _TmpDN:=JBCStr;
     // Test code start
     // open port.
     // dll version.
     ver := A_Get_DLL_Version(0);
//     A_CreatePrn(0,'d:\out.prn');

     // search port.
     nLen := A_GetUSBBufferLen() + 1;
     strmsg := 'DLL ' + ver + dpCrLf;   // only sample coding, not smart.
     If nLen > 1 then
     begin
         len1 := 128;
         len2 := 128;
         SetLength(buf1,len1);
         SetLength(buf2,len2);
         A_EnumUSB(pbuf);
         A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
         sw := 1;
         If 0 < sw then
                ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
         else
                ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
         If 0 < ret then
             strmsg := strmsg + 'Open USB fail!'
         else
         begin
             SetLength(buf1,len1);
             SetLength(buf2,len2);
             strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
             strmsg := strmsg + buf1;
             strmsg := strmsg + dpCrLf+ 'Device path: ';
             strmsg := strmsg + buf2;
             //sw := 2;
             If 2 = sw then
             begin
                //get printer status.
                pbuf[0] := #$01;
                pbuf[1] := #$46;
                pbuf[2] := #$0D;
                pbuf[3] := #$0A;
                A_WriteData(1, pbuf, 4);   //<SOH>F
                ret := A_ReadData(pbuf, 2, 1000);
             end;
         end;
     end
     else
     begin
     {
         CreateDirectory(PChar(szSavePath), nil);
         ret := A_CreatePrn(0, szSaveFile);   // open file.
         strmsg := strmsg + 'Open ' + szSaveFile;
         if 0 < ret then
             strmsg := strmsg + ' file fail!'
         else
             strmsg := strmsg + ' file succeed!';
     }
     end;
     //ShowMessage(strmsg);
     If 0 < ret then
         exit;
     /

       A_Set_Darkness(18);

     A_Prn_Barcode(20,  60, 1, 'E', a, b, 40, 'N', 0, pchar(_TmpDN));
     A_Print_Out(1, 1, 2,1);
     A_ClosePrn;
end;

Procedure PrintLabel6(LPT,JBCStr1,JBCStr2,JBCStr3,JBCStr4,JBCStr5,JBCStr6:string);
var
     ret,nLen,sw : integer;
     pbuf : array[0..127] of AnsiChar;
     ver : PAnsiChar;
     strmsg : string;
     len1,len2 : integer;
     buf1,buf2 : AnsiString;
     buff1 : array[0..127] of WideChar;
     //himage : HBITMAP;
  buf,_TmpDN:string;
begin
     // Test code start
     // open port.
     // dll version.
     ver := A_Get_DLL_Version(0);

     // search port.
     nLen := A_GetUSBBufferLen() + 1;
     strmsg := 'DLL ' + ver + dpCrLf;   // only sample coding, not smart.
     If nLen > 1 then
     begin
         len1 := 128;
         len2 := 128;
         SetLength(buf1,len1);
         SetLength(buf2,len2);
         A_EnumUSB(pbuf);
         A_GetUSBDeviceInfo(1, PAnsiChar(buf1), @len1, PAnsiChar(buf2), @len2);
         sw := 1;
         If 0 < sw then
                ret := A_CreatePrn(12, PAnsiChar(buf2)) // open usb.
         else
                ret := A_CreateUSBPort(1); // must call A_GetUSBBufferLen() function fisrt.
         If 0 < ret then
             strmsg := strmsg + 'Open USB fail!'
         else
         begin
             SetLength(buf1,len1);
             SetLength(buf2,len2);
             strmsg := strmsg + 'Open USB:' + dpCrLf+ 'Device name: ';
             strmsg := strmsg + buf1;
             strmsg := strmsg + dpCrLf+ 'Device path: ';
             strmsg := strmsg + buf2;
             //sw := 2;
             If 2 = sw then
             begin
                //get printer status.
                pbuf[0] := #$01;
                pbuf[1] := #$46;
                pbuf[2] := #$0D;
                pbuf[3] := #$0A;
                A_WriteData(1, pbuf, 4);   //<SOH>F
                ret := A_ReadData(pbuf, 2, 1000);
             end;
         end;
     end
     else
     begin
     {
         CreateDirectory(PChar(szSavePath), nil);
         ret := A_CreatePrn(0, szSaveFile);   // open file.
         strmsg := strmsg + 'Open ' + szSaveFile;
         if 0 < ret then
             strmsg := strmsg + ' file fail!'
         else
             strmsg := strmsg + ' file succeed!';
         }
     end;
     //ShowMessage(strmsg);
     If 0 < ret then
         exit;
     /

       A_Set_Darkness(15);
     if JBCStr1<>'' then
        A_Prn_Barcode(5,  15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr1));
     if JBCStr2<>'' then
        A_Prn_Barcode(140,  15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr2));
     if JBCStr3<>'' then
        A_Prn_Barcode(275,  15, 1, 'E', 1, 5, 40, 'N', 0, pchar(JBCStr3));
     if JBCStr4<>'' then
        A_Prn_Barcode(5,  30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr4));
     if JBCStr5<>'' then
        A_Prn_Barcode(140,  30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr5));
     if JBCStr6<>'' then
        A_Prn_Barcode(275,  30, 1, 'E', 1, 5, 50, 'N', 0, pchar(JBCStr6));

     A_Print_Out(1, 1, 1,1);
     A_ClosePrn;
end;

end.


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`stop_filter` 和 `prn` 都是 scapy 的 `sniff()` 函数的可选参数,但它们的作用不同。 `stop_filter` 用于设置抓包的终止条件。当 `stop_filter` 函数返回 True 时,`sniff()` 函数停止抓包并返回抓到的数据包列表。`stop_filter` 函数接收一个参数,即当前抓到的数据包,你可以根据自己的需求编写 `stop_filter` 函数,例如检查数据包的协议类型、源 IP、目的 IP 等等。 `prn` 用于设置抓包时的回调函数,每抓到一个数据包就会调用一次该函数,并将抓到的数据包作为参数传递给该函数。你可以在 `prn` 函数中对抓到的数据包进行处理,例如打印数据包的信息、存储数据包到文件中等等。如果不设置 `prn` 参数,则默认情况下,`sniff()` 函数抓到的数据包不会被输出到屏幕上。 以下是一个使用 `stop_filter` 和 `prn` 参数的例子: ```python from scapy.all import * def stop_filter(packet): # stop sniffing when a packet with a specific protocol is captured return packet.haslayer(TCP) def packet_handler(packet): # handle the captured packet print(packet.summary()) sniff(filter="tcp and port 80", stop_filter=stop_filter, prn=packet_handler) ``` 在这个例子中,我们使用 `filter` 参数来设置抓包的过滤条件,即抓取所有 TCP 协议并且目的端口为 80 的包。我们使用 `stop_filter` 参数来设置终止条件,即当抓到任何一个 TCP 协议的数据包时停止抓包。我们使用 `prn` 参数来设置回调函数,即每抓到一个数据包就打印它的摘要信息。在主程序中,我们没有设置抓包的时间或个数,而是在满足终止条件时停止抓包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trassion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值