python端口扫描

article/2025/9/30 13:14:36

文章目录

  • python网络编程
    • socket函数
      • 服务器端套接字函数
      • 客户端套接字函数
      • 公共用途套接字
    • C/S架构实践
  • 编写端口扫描器
    • 多线程端口扫描2.0

python网络编程

  • socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答请求。使主机间或者一台计算机上的进程间可以通讯。

C/S架构:
在这里插入图片描述

socket函数

  • socket()函数创建套接字,语法:socket.socket([family[,type[,proto]]])
  • family:套接字家族可以为AF_UNIX(本机内进程间)或者AF_INET(主机与主机间通信)
  • type:套接字类型可以根据面向链接还是非链接分为SOCK_STREAM或SOCK_DGRAM
  • protocol:协议,一般不填

服务器端套接字函数

  • s.bind()绑定地址(host,port)到套接字(传入的参数为元组)
  • s.listen()开始tcp监听
  • s.accept()被动接收tcp客户端链接

客户端套接字函数

  • s.connect() 主动初始化tcp服务器链接
  • s.connect_ex()上个函数的扩展版本,出错返回错误码而不是报异常

公共用途套接字

在这里插入图片描述可能看到这里都很懵,看看实际代码吧

C/S架构实践

在这里插入图片描述0.0.0.0代表所有网卡,死循环表示一直接收客户端请求

写一个客户端请求:

# encoding:utf-8import socket
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_host = '127.0.0.1'
server_port = 8888
c.connect((server_host,server_port))
print c.recv(1024)
c.close()

这种网页只能实现服务器向客户端发送信息,如果是双向发送,在客户端加send()函数在服务器端加recv()函数

编写端口扫描器

前面我写了编写目录扫描工具,有兴趣的可以康康
首先,如何判断端口是否开放。直接请求该端口,connect_ex请求错误时会返回ture

#!/usr/bin/python
# encoding:utf-8import socket
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = '127.0.0.1'
port = 80
if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)
c.close()

一个套接字只能connect一次,因为扫描要修改套接字的端口。所以创建套接字和close要放在循环内。

#!/usr/bin/python
# encoding:utf-8import socket
import sysports = (165535)
host = sys.argv[1]#接收命令行传入的urlfor port in ports:c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()

现在就是65535个端口全扫啦,一个迷你namp就这十几行代码,但它还是有点慢,下面加入多线程

多线程端口扫描2.0

#!/usr/bin/python
# encoding:utf-8import socket
import sys
import threading
import queuedef scan():while not q.empty():port = q.get()c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()if __name__=="__main__":host = sys.argv[1]thread_num = sys.argv[2]q = queue.Queue()for port in range(1,65535):q.put(port)for i in range(int(thread_num))t = threading.Thread(target=scan)t.start()t.join()#子线程全部运行完了结束进程,以免线程卡死

if name == ‘main’:的作用
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。


http://chatgpt.dhexx.cn/article/nbe0pRVj.shtml

相关文章

https默认端口443_为什么选择80作为默认HTTP端口,选择443作为默认HTTPS端口?

https默认端口443 While many of us are familiar with various ports being assigned for specific purposes or uses, we may not know the particular reason why they were chosen. Today’s SuperUser Q&A post has the answers to a curious reader’s questions. 尽…

HTTP协议

目录 前置 1.网络划分 1)局域网 2)广域网 2.IP地址和端口号 1)IP地址 2)端口号 3.网络通信 一,概念 1.HTTP 2.二进制数据和文本 二,抓包 1.网络抓包 2.URL(统一资源定位器&#…

C语言字符串数组赋值错误

直接上代码&#xff1a; #include"stdio.h"int main(){char a[10];for(int i 0; i<10;i){printf("第%d个&#xff1a;",i);scanf("%c",&a[i]);}return 0; }经典的错误&#xff0c;标准的零分&#xff01; 这样的赋值手法&#xff0c;是…

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f; c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。 二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维…

关于中字符串常量给字符数组赋值

结论 在定义字符数组时&#xff0c;可以同时初始化字符数组&#xff0c;即用字符串常量给字符数组赋值在定义完之后&#xff0c;则不允许用字符串常量给字符数组赋值。如需赋值&#xff0c;则使用strcpy()函数&#xff08;需包含头文件string.h&#xff09; #include <std…

C语言:字符数组赋值

字符数组&#xff1a;C语言学习中较麻烦的部分&#xff0c;C语言中没有字符串这种类型的数组&#xff0c;字符串只能存储在字符型数组中。 1、定义时直接赋值 char a[10]{"I LOVE C"};//可以直接省去花括号直接写成char a[10]I LOVE C"; 注意&#xff1a;此处的…

【C#】 Convert.ToInt16 、Convert.ToInt32、Convert.ToInt64 区别

一般写程序是用的都是Convert.ToInt32&#xff0c;为什么呢&#xff1f; 1.Convert.ToInt是数据类型转换成int类型 2. 有三种方法toint16,toint32,toint64 int16-数值范围&#xff1a;-32768 到 32767 int32-数值范围&#xff1a;-2,147,483,648 到 2,147,483,647 …

C# 中int short Int16 Int32 Int64详解

Java中没有Int32,Int64,,只有int,short,long Java中int就代表Int32 ,short就代表Int16&#xff0c;long就代表Int64 首先&#xff0c;几个基本的关键字&#xff1a; Int16 short, 占2个字节. -32768 ~ 32767 Int32 int, 占4个字节. -2147483648 ~ 2147483647 Int64 lon…

【C++】INT32_MAX

INT32_MAX INT32_MAX可以把它认为在limits.h下面的一个宏。关于宏&#xff0c;可以参考这篇文章&#xff0c;直接点击&#xff01;其实就是一个别称&#xff01;

python中int的取值范围_int32的取值范围是多少?

int32的数值取值范围为“-2147483648”到“2147483647”;而int64的数值取值范围为“-9223372036854775808”到“9223372036854775808”。 int32的取值范围 计算机中32位int类型变量的范围,其中int类型是带符号整数。 正数在计算机中表示为原码,最高位为符号位: 1的原码为000…

c语言unsigned int 范围,unsigned int 32比特数据范围为-2147

提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsigned int,下面我们一起来看看吧! unsigned int 一、指代不同 1、int:定义整数类型变量的标识符。 …

C#中ToInt32以及类似函数用法介绍

C#中ToInt32以及类似函数用法介绍 作用程序举例程序逻辑程序代码 程序 作用 将指定的值转换为 32 位有符号整数。对应的还有ToInt16&#xff0c;ToInt64 指定的值可以是字符串、时间、位等数据类型。 程序举例 程序逻辑 当输入值整数时&#xff0c;当输入值大于0&#xff0…

C语言 —— int32_t uint32_t 及size_t

文章目录 int32_t和int区别使用原因stdint.h源码 int32_t和uint32_t的区别size_t在不同机器中定义不同&#xff1a;stdint.h源码 参考文档 int32_t和int区别 我们都知道&#xff0c;C语言的基本类型就char, short, int 等。但是我们在看其他源码时经常碰到int32_t, int8_t这种…

linux futex 进程同步,Linux的新式线程同步原语——Futex

在我的上一篇文章《本地POSIX线程库》http://www.linuxidc.com/Linux/2013-10/91409.htm 中&#xff0c;提到了Futex一词&#xff0c;发现好多读者误以为这是我的笔误&#xff0c;将Mutex错写为Futex了。其实Futex是Linux的一种全新的线程同步原语。本文将为您解读高效的Futex。…

futex同步机制分析之三内核实现

一、源码引入 前两篇从应用分析到了库&#xff0c;本篇到内核中看看&#xff0c;futex到底何方神圣&#xff1f;&#xff08;Linux3.1.1&#xff09; 先看一下futex.c和futex.h&#xff08;kennel/futex.c linux/futex.h&#xff09;: /*** struct futex_q - The hashed futex…

futex同步机制分析之一应用

futex同步机制分析之一应用 一、多线程&#xff08;进程&#xff09;的同步机制 c编程中最难的部分有哪些&#xff0c;估计绝大多数人都会首先提出来是多线程&#xff08;进程&#xff09;编程。为什么多线程编程难呢&#xff1f;一个主要的原因就是多线程的同步。在多线程同步…

FUTEX_SWAP补丁分析-SwitchTo 如何大幅度提升切换性能?

作者简介 胡哲宁&#xff0c;西安邮电大学计算机科学与技术专业大二学生。 Google SwitchTo 由于协程本身对操作系统的不可见性&#xff0c;协程中出现的 BUG 往往不能通过一些已有的工具去排查。在谷歌内部有一套闭源的用户态任务调度框架 SwitchTo, 这个框架可以为谷歌提供延…

futex问答

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…

Futex系统调用,Futex机制,及具体案例分析

Futex 1、背景1.1 自己实现锁1.1.1 自旋锁1.1.2 sleep自旋1.1.3 小结 1.2 futex1.2.1 什么是Futex1.2.2 futex诞生之前1.2.3 futex诞生之后 2、Futex系统调用3、Futex机制4、具体案例分析4.1 在Bionic中的实现4.2 C语言实现 5、参考及扩展阅读 首先要区分一下futex系统调用和fu…

深度讲解futex问答(上)

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…