scan camera

getIPListByIPMask.py
#coding=utf-8
#http://ipblock.chacuo.net/down/t_txt=c_CN
from multiprocessing.dummy import Pool as ThreadPool
import re,datetime
# 生成下一次循环的边界条件

def ip2num(ip):
    ip=[int(x) for x in ip.split('.')]
    return ip[0] <<24 | ip[1]<<16 | ip[2]<<8 |ip[3]
def num2ip(num):
    return '%s.%s.%s.%s' %( (num & 0xff000000) >>24,
                            (num & 0x00ff0000) >>16,
                            (num & 0x0000ff00) >>8,
                            num & 0x000000ff )
def get_ip(ip):
    start,end = [ip2num(x) for x in ip.split('-') ]
    return [ num2ip(num) for num in range(start,end+1) if num & 0xff ]

def gen_ip(ip_range):
    iplist = get_ip(ip_range)
    filename = re.sub(r'[^0-9]', '',str(datetime.datetime.now())) + '.txt'
    with open(filename, "a+") as wObej:
        for ip in iplist:
            print (ip)
            wObej.write(ip + "\n")
    wObej.close()

if __name__ == '__main__':
    ip_ranges=[]
    with open("zh_IP.txt", "r") as f:
        for line in f.readlines():
            lineList = line.split("\t")
            iP_mask = lineList[0] + "-" + lineList[1]
            ip_ranges.append(iP_mask)
    f.close
    print("strart gen ip")
    pool = ThreadPool(processes=4)
    results = pool.map(gen_ip, ip_ranges)
    pool.close()
    pool.join()
554Scan.py
# coding: utf-8

import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool

def scan_port(ip,port=554):
    try:
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.settimeout(5)
        remote_server_ip = socket.gethostbyname(ip)

        print '-' * 60
        print 'Please wait, scanning remote host %s port %s'%( remote_server_ip,port)
        print '-' * 60
        res = s.connect_ex((remote_server_ip,port))
        if res == 0: # 如果端口开启 发送 hello 获取banner
            with open("554IP.txt","a+") as f :
                f.write(ip+"\n")
                f.close()
            try:
                s.send('hello')
                banner = s.recv(1024)


            except Exception,e:
                print 'Port {}: OPEN'.format(port)
                print str(e.message)
            else:
                print 'Port {}: OPEN'.format(port)
                print 'Banner {}'.format(banner)

        s.close()
    except Exception,e:
        print str(e.message)



# Check what time the scan started
t1 = datetime.now()


pool = ThreadPool(processes = 2)
ipList=[]
with open("netwave.txt","r") as f:
    for line in f.readlines():
        ipList.append(line.strip("\n"))
print("*test ip %d num "%len(ipList))
results = pool.map(scan_port,ipList)
pool.close()
pool.join()

print 'Multiprocess Scanning Completed in  ', datetime.now() - t1
scan_camera.py
#coding=utf-8

#http://86.254.95.226:81/get_status.cgi  判断摄像头
#/get_camera_params.cgi
#/snapshot.cgi
#/videostream.cgi

# coding: utf-8

import requests
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
import socket
import re



def check_webserver(address, port):

        request_string = "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" %address
        # print 'HTTP request:'
        # print '|||%s|||' % request_string
        s = socket.socket()
        s.settimeout(15)
        print "Attempting to connect to %s on port %s" %(address, port)
        try:
            s.connect((address, port))
            s.send(request_string)
            rsp = s.recv(1024)

        except socket.error, e:
            print "Connection to %s on port %s failed: %s" %(address, port, e)
            return False
        finally:
            print "Closing the connection"
            s.close()
        try:
            locationList = re.findall("Location: (.*)", rsp)
            location="/"
            if len(locationList)!=0:
                location +=locationList[0].strip("\r\n").split("/")[-1]
            print("Locatin : %s"% location)
        except:
            pass
        try:
            lines = rsp.splitlines()
            print 'First line of HTTP response: %s' % lines[0]
            version, status, message = re.split(r'\s+', lines[0], 2)
            print 'Version: %s, Stuats: %s, Message: %s' %(version, status, message)
        except ValueError:
            print 'Failed to split status line'
            return False
        if status in ['200', '302',"401"]:
            print 'Success - status was %s' %status
            with open("camera_IP.txt", "a+") as f:
                f.write(address + ":" + str(port) + location+"\n")
                f.close()
            return True
        else:
            print 'Staus was %s' %status
            return False

def scan_camera(ipPort):
        splitData = ipPort.split(":")
        ip = splitData[0]
        port = int(splitData[1])
        if check_webserver(ip,port):
            print"######"*25


# Check what time the scan started
t1 = datetime.now()
ipList=[]
with open("netwave.txt","r") as f:
    for line in f.readlines():
        ipList.append(line.strip("\n"))
print("test")
ports=[]        
for i in range(80,49152):
    ports.append(i)

def  getIpPortList(ipList,port):
    mIpPortList = []
    for ip in ipList:
        mIpPortList.append(ip+":"+str(port))
    return mIpPortList

for port in ports:
    ipPortList=getIpPortList(ipList,port)
    pool = ThreadPool(processes = 8)
    results = pool.map(scan_camera,ipPortList)
    pool.close()
    pool.join()

print 'Multiprocess Scanning Completed in  ', datetime.now() - t1
要实现 camera2 扫码功能,可以按照以下步骤进行操作: 1. 在 AndroidManifest.xml 中添加相机权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> ``` 2. 在布局文件中添加 SurfaceView 组件,用于显示相机预览: ```xml <SurfaceView android:id="@+id/camera_preview" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在 Activity 中获取 SurfaceView 组件,并在 onResume() 方法中打开相机: ```java private SurfaceView mPreview; private CameraManager mCameraManager; private CameraDevice mCameraDevice; private CameraCaptureSession mCaptureSession; private CaptureRequest.Builder mPreviewRequestBuilder; private HandlerThread mBackgroundThread; private Handler mBackgroundHandler; @Override protected void onResume() { super.onResume(); startBackgroundThread(); mPreview = findViewById(R.id.camera_preview); SurfaceHolder holder = mPreview.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { openCamera(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // do nothing } @Override public void surfaceDestroyed(SurfaceHolder holder) { closeCamera(); } }); } private void startBackgroundThread() { mBackgroundThread = new HandlerThread("CameraBackground"); mBackgroundThread.start(); mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); } private void openCamera() { mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { String cameraId = mCameraManager.getCameraIdList()[0]; mCameraManager.openCamera(cameraId, new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; createCameraPreviewSession(); } @Override public void onDisconnected(CameraDevice camera) { camera.close(); mCameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { camera.close(); mCameraDevice = null; } }, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } private void closeCamera() { if (mCaptureSession != null) { mCaptureSession.close(); mCaptureSession = null; } if (mCameraDevice != null) { mCameraDevice.close(); mCameraDevice = null; } } private void createCameraPreviewSession() { try { Surface surface = mPreview.getHolder().getSurface(); mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); mPreviewRequestBuilder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { if (mCameraDevice == null) { return; } mCaptureSession = session; try { mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { // do nothing } }, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } ``` 4. 添加扫码功能,可以使用 zxing 库,将其添加到项目的依赖中: ```groovy dependencies { implementation 'com.google.zxing:core:3.4.1' } ``` 5. 在 Activity 中添加扫码方法: ```java private static final int REQUEST_CODE_SCAN = 0x0000; private void startScan() { Intent intent = new Intent(this, CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE_SCAN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) { String result = data.getStringExtra(CaptureActivity.EXTRA_RESULT); // do something with the scan result } else { super.onActivityResult(requestCode, resultCode, data); } } ``` 6. 在扫码界面中启动相机,并在扫描到二维码时返回结果: ```java private SurfaceView mPreview; private Camera mCamera; private Handler mHandler; private boolean mIsScanning = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan); mHandler = new Handler(); mPreview = findViewById(R.id.camera_preview); SurfaceHolder holder = mPreview.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { startCamera(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // do nothing } @Override public void surfaceDestroyed(SurfaceHolder holder) { stopCamera(); } }); } private void startCamera() { try { mCamera = Camera.open(); Camera.Parameters params = mCamera.getParameters(); params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); mCamera.setParameters(params); mCamera.setPreviewDisplay(mPreview.getHolder()); mCamera.setPreviewCallback(new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { if (mIsScanning) { Camera.Size size = camera.getParameters().getPreviewSize(); int width = size.width; int height = size.height; Image barcode = new Image(width, height, "Y800"); barcode.setData(data); Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(barcode))); if (result != null) { mIsScanning = false; Intent intent = new Intent(); intent.putExtra(EXTRA_RESULT, result.getText()); setResult(RESULT_OK, intent); finish(); } } } }); mCamera.startPreview(); mIsScanning = true; } catch (IOException e) { e.printStackTrace(); } } private void stopCamera() { if (mCamera != null) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } } ``` 这样,就可以实现 camera2 扫码功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值