前言:
我有一个双接口智能卡读卡器,具有一些扩展功能(除了向卡发送APDU命令和接收APDU响应).
例如,在其文档中提到您可以使用以下命令获取阅读器的固件版本:
GET_FIRMWARE_VERSION: FF 69 44 42 05 68 92 00 05 00
在它的工具中,有一个用于此功能的按钮,它工作正常:
我甚至嗅了嗅USB端口,看看我的电脑和读卡器之间的连接到底有什么交换这个功能:
问题:
我想使用其他工具或通过代码获取我的阅读器版本(并可能发送其他扩展命令),但我必须在读卡器中插入一张卡才能发送命令,否则我会收到No Card Present
异常,而我不想发送命令到卡!(阅读器工具成功回答GET_FIRMWARE_VERSION,读卡器插槽中没有任何卡可用)
到目前为止我做了什么:
1.我尝试了一些工具,包括OpenSCTool,PyAPDUTool和其他读者工具.2.我写了以下python脚本来发送扩展命令.
#--- Importing required modules.
import sys
import time
sys.path.append("D:\\PythonX\\Lib\\site-packages")
from smartcard.scard import *
import smartcard.util
from smartcard.System import readers
#---This is the list of commands that we want to send device
cmds =[[,0xFF,0x69,0x44,0x42,0x05,0x68,0x92,0x00,0x04,0x00],]
#--- Let's to make a connection to the card reader
r=readers()
print "Available Readers :",r
print
target_reader …
Run Code Online (Sandbox Code Playgroud) 我想用我的GSM调制解调器拨打电话.所以我写了下面的程序:
import time
import serial
recipient = "+98xxxxxxxxxx"
phone = serial.Serial("COM10", 115200, timeout=5)
try:
time.sleep(0.5)
phone.write(b'ATZ\r')
time.sleep(1)
phone.write(b'ATD"'+recipient.encode() +b'"\r')
while(1):
print(phone.readline())
time.sleep(0.5)
finally:
phone.close()
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到了这个输出:
>>> ================================ RESTART ================================
>>>
b'ATZ\r\r\n'
b'OK\r\n'
b'ATDxxxxxxxxxx\r\r\n'
b'NO CARRIER\r\n'
Run Code Online (Sandbox Code Playgroud)
这个"NO CARRIER"错误意味着什么?
请注意,我可以成功发送短信.
这是我用来发送短信的程序:
import time
import serial
recipient = "+98xxxxxxxxxx"
message = "Test"
phone = serial.Serial("COM10", 115200, timeout=5)
try:
time.sleep(0.5)
phone.write(b'ATZ\r')
time.sleep(0.5)
phone.write(b'AT+CMGF=1\r')
time.sleep(0.5)
phone.write(b'AT+CMGS="' + recipient.encode() + b'"\r')
time.sleep(0.5)
phone.write(message.encode() + b"\r")
time.sleep(0.5)
phone.write(bytes([26]))
time.sleep(0.5)
finally:
phone.close()
Run Code Online (Sandbox Code Playgroud) 我编写了下面的Python程序来与我的D-Link DWM-156 GSM调制解调器进行通信.该程序等待来电,当收到RING警报时,它接受该呼叫.
幸运的是它工作正常;)
该程序:
import time
import serial
phone = serial.Serial("COM10", 115200, timeout=5)
try:
time.sleep(1)
while(1):
x = phone.readline()
print(x)
if (x == b'RING\r\n'):
phone.write(b'ATA\r')
time.sleep(0.5)
finally:
phone.close()
Run Code Online (Sandbox Code Playgroud)
运行期间的输出:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n' #Here, my friend (named "Jimmy",for example), called me.
b'OK\r\n'
b''
b''
b''
b''
b''
Run Code Online (Sandbox Code Playgroud)
如上所示,在接到来电后,GSM调制解调器立即接受它,从那一点到最后,我们有一个有效的呼叫.
我的问题:
1-在此活动呼叫期间是否可以发送/接收某些数据(例如SMS)?或者至少可以在这个有效通话期间在这个频道的另一侧(即吉米手机的扬声器)发出噪音吗?(我不想发出可识别的声音,噪音就足够了.虽然有一种发送可识别语音的方法确实更好.)
2-为什么此程序检测到来电,但未检测到来电短信?往下看.当Jimmy向我的GSM调制解调器发送3条短信时,你可以看到我程序的输出(并且他在我的手机上收到了所有这些的"已发送"通知).
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b''
b''
b''
b''
Run Code Online (Sandbox Code Playgroud)
如上所述,我没有收到任何信息 …
我通过Eclipse制作了流行的"Hello World"javacard代码的.cap文件
现在我想通过GPShell和ACR38智能卡读卡器将它加载到真正的javacard中.
问题:我需要任何密钥才能在卡中加载.cap文件吗?我的意思是,我应该在将我的小程序上传到卡中之前进行身份验证,还是不是必需的?我认为认证是非常重要的.在没有身份验证的情况下上传.cap是不合理的.但我不知道,如何进行身份验证.问题:这有什么问题?
C:\Users\ghasemi>java -jar e:\gpj\gpj.jar -load e:\helloWorld.cap -install
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
javax.smartcardio.CardException: connect() failed
at sun.security.smartcardio.TerminalImpl.connect(Unknown Source)
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
ource)
Caused by: sun.security.smartcardio.PCSCException: SCARD_E_SHARING_VIOLATION
at sun.security.smartcardio.PCSC.SCardConnect(Native Method)
at sun.security.smartcardio.CardImpl.<init>(Unknown Source)
... 2 more
Found card in terminal: ACS CCID USB Reader 0
java.lang.NullPointerException
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
ource)
C:\Users\ghasemi>java -jar e:\gpj\gpj.jar -load e:\helloWorld.cap -install
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0 …
Run Code Online (Sandbox Code Playgroud) 我想在我安装的Gitlab login
的LDAP身份验证功能中编写一些日志.
之后我在Gitlab的登录表单中进行了一些登录尝试.
但正如您在上面看到的那样,debug
文件没有创建.
我需要做什么?它需要重新编译还是什么?
请注意,我还使用以下命令重新启动了该服务,但没有任何更改:
# gitlab-ctl restart
我想要实现以下功能:
void calc ( double* a, double* b, int r, int c, double (*f) (double) )
Run Code Online (Sandbox Code Playgroud)
输入参数a,r,c和f,输出b."a"和"b"是具有"r"行和"c"列的2d矩阵."f"是一个函数指针,可以指向以下类型的任何函数:
double function?name ( double x ) {
…
}
Run Code Online (Sandbox Code Playgroud)
函数 calc
将矩阵a中的每个元素(即aij)转换为矩阵b中的bij = f(aij).
我实现calc
如下函数,并将其放在一个程序中进行测试:
#include <stdlib.h>
#include <iostream>
using namespace std;
double f1( double x ){
return x * 1.7;
}
void calc ( double* a, double* b, int r, int c, double (*f) (double) )
{
double input;
double output;
for(int i=0;i<r*c;i++)
{
input=a[i];
output=(*f)(input);
b[i]=output;
}
}
int …
Run Code Online (Sandbox Code Playgroud) 我有一张带有以下ATR的智能卡:
ATR = 3B 9E 94 80 1F 42 80 31 00 73 BE 21 10 66 54 59 53 04 4C 25 CF
.
根据atr-parse.appspot.com的输出,我发现它是MCI(伊朗移动通信公司)的SIM卡.
这些是我从历史字节获得的信息:
(紧凑型TLV数据对象)
标签:3,Len:1(卡服务数据字节)
卡服务数据字节:0
EF.DIR和EF.ATR访问服务:通过GET RECORD(s)命令
卡与MF
标签:7,Len:3(卡片功能)
选择方法:190
支持记录号码
支持短EF标识符
隐式DF选择
按文件标识符选择DF
通过路径选择DF
DF选择全DF名称
数据编码字节:33
写功能的行为:专有
BER-TLV标记字段的第一个字节的值'FF':有效
四重奏数据单位:1
命令链,长度字段和逻辑通道:16
逻辑频道号码分配:由卡
最大逻辑通道数:1
标签:6,Len:6(发布前数据)
数据:54 59 53 04 4C 25"TYS.L%"
如上所述,提到该卡有一个MF
.
问题是我对这张卡无能为力.在第一步中,我想列出其内容.我看了TS 11.11,TS 102.221,TS 131.102和TS 151.011规范.
据我所知,从上面的文件中,卡的系统文件包括Master File
其AID 3F00 …
为什么当我想编译以下多线程合并排序C程序时,我收到此错误:
ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:20: fatal error: iostream: No such file or directory
#include <iostream>
^
compilation terminated.
ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:22: fatal error: iostream.h: No such file or directory
#include <iostream.h>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
我的节目:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using namespace std;
#define N 2 /* # of thread */
int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; /* target …
Run Code Online (Sandbox Code Playgroud) 我编写了以下程序来计算Java中字符串的SHA-256哈希值:
public class ToHash {
public static void main(String[] args) {
byte[] data = "test".getBytes("UTF8");
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(data);
System.out.println(new BASE64Encoder().encode(hash));
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,这很好.在下一步中,我想以接受文件并计算其哈希值的方式开发它.我的解决方案是在字符串数组中读取整个文件,并在该字符串数组上调用该digest()
方法.但是有两个问题:
我不知道如何将整个文件读入数组?目前我认为我必须逐行阅读并附加一个带有新行的数组!
以上方法需要大量文件的大量内存!
这是我当前读取文件的程序:
public class ToHash {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, FileNotFoundException, IOException {
// TODO code application logic here
// The name of the file to open.
String fileName = "C:\\Users\\ghasemi\\Desktop\\1.png";
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName));
while …
Run Code Online (Sandbox Code Playgroud) 我正在尝试检查和分析我的网络流量.突然间我发现了令人困惑的事情.有人认为数据包会根据它们分成流(SRC_IP, DES_IP, SRC_PORT, SRC_PORT , PROTOCOL_NUM)
.但现在我发现两组具有相同功能的数据包,但在Wireshark中被解释为两个不同的流:
如下所示,RTP
具有偶数包数的包是单个流,而RTP
具有奇数包数的包是另一个流,而两者都相等(SRC_IP, DES_IP, SRC_PORT, SRC_PORT , PROTOCOL_NUM)
.为什么?
要比较统计数据:
它们被解释为两个不同的流: