端口Banner抓取

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: sharp
# @Date:   2016-05-24 15:48:35
# @Last Modified by:   sharp
# @Last Modified time: 2016-05-29 09:59:45

import socket

socket.setdefaulttimeout(0.5)

remote_ip = "192.168.80.134"

try:

    for port in range(20, 30):
        s = socket.socket()
        res = s.connect_ex((remote_ip, port))
        if res == 0:
            try:
                s.send('123456')
                banner = s.recv(1024)
                s.close()
                pass
            except Exception, e:
                print str(e.message)
            else:
                print 'Port in {} '.format(port)+'Banner: {}'.format(banner)
except Exception, e:
        print str(e.message)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用C++的网络编程库,如Winsock或Boost.Asio来实现端口数据抓取程序。以下是一个简单的示例代码,用于从指定端口读取数据并输出到控制台: ```c++ #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main(int argc, char** argv) { WSADATA wsaData; SOCKET sock; sockaddr_in serverAddr; char buffer[1024]; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { cerr << "Failed to initialize Winsock\n"; return 1; } if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { cerr << "Failed to create socket\n"; WSACleanup(); return 1; } memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); serverAddr.sin_port = htons(atoi(argv[1])); if (bind(sock, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { cerr << "Failed to bind socket\n"; closesocket(sock); WSACleanup(); return 1; } if (listen(sock, SOMAXCONN) == SOCKET_ERROR) { cerr << "Failed to listen on socket\n"; closesocket(sock); WSACleanup(); return 1; } cout << "Listening on port " << argv[1] << endl; SOCKET client; sockaddr_in clientAddr; int clientAddrLen = sizeof(clientAddr); if ((client = accept(sock, (sockaddr*)&clientAddr, &clientAddrLen)) == INVALID_SOCKET) { cerr << "Failed to accept connection\n"; closesocket(sock); WSACleanup(); return 1; } cout << "Accepted connection from " << inet_ntoa(clientAddr.sin_addr) << endl; int recvSize; while ((recvSize = recv(client, buffer, sizeof(buffer), 0)) > 0) { buffer[recvSize] = '\0'; cout << buffer; } if (recvSize == SOCKET_ERROR) { cerr << "Failed to receive data\n"; closesocket(client); closesocket(sock); WSACleanup(); return 1; } closesocket(client); closesocket(sock); WSACleanup(); return 0; } ``` 这段代码可以通过命令行参数指定要监听的端口号,例如: ``` ./port-sniffer.exe 8080 ``` 它将监听本地的8080端口,并将收到的数据打印到控制台上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值