网络编程

【网络编程-之黑暗力量的探索】阅读需要C语言基础,TCP/IP基础

【TCP/IP分层】

网络编程

【链路层】

socket(XXX, SOCK_PACKET, XXX);

【网络层】

socket(XXX, SOCK_RAW, XXX);

【传输层】

socket(XXX, SOCK_STREAM|_DGRAM, XXX);

【思考】如何玩转这些报文?

【*】【TCP,IP报文】

网络编程

网络编程

【控制位的含义】

网络编程

 

看看IP头部的报文格式

网络编程

【*】【UDP】

 网络编程

看完上面的报文格式后,你有没有扩展一些想法?

让我们来先看看TCP/IP的三次握手吧!

【三次握手】

网络编程

网络编程

网络编程

[四次挥手]

 网络编程

【工具】 tcpdump ,Wireshark 使用这些工具可以很好的观察TCP/IP协议的过程。

              谷歌浏览器自带的F12功能键,能很好的查看HTTP的过程。(工欲善其事必先利其器)

【例子一 端口扫描器】

这种端口器速度极慢,不仅要完成三次握手,还要四次断开挥手,可想而知速度多慢。

#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{
    if (argc >= 3) {
        int start_port = atoi(argv[2]);
        int end_port = atoi(argv[3]);
    
        for (int i=start_port; i < end_port; i++) {

            int socket_fd = socket(AF_INET, SOCK_STREAM, 0);  

            if (socket_fd == -1) {
                perror("socket初始化失败!!\n");
                exit(0);
            }

            struct sockaddr_in ser_addr;
            memset(&ser_addr, 0, sizeof(ser_addr));
            ser_addr.sin_family = AF_INET;
            inet_aton(argv[1], &ser_addr.sin_addr);
            ser_addr.sin_port = htons(i);

            int result = connect(socket_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));

            if (result != -1) {
                printf("端口%d开放!!\n", i);
            }

            close(socket_fd);

        }
    } else {
        printf("请输入正在的IP地址和端口范围\n");
    }

    return 0;
}

运行情况,本地运行速度较快,要是扫描网上的IP,速度非常慢,后面我们将介绍另一种快速的扫描方法。

当然,我们只是扫描了指定IP,而不是IP范围内的扫描,这个需要多线程的基础。

可以找网上比较流行的端口扫描器,看看别人的软件是如何强大的,然后再对比自己的,就能发现不足之处。

这种类型的端口扫描是不推荐的,只是作为端口扫描器的失败例子而已。

网络编程

【例子二 SYN端口扫描器】

【例子三 FIN端口扫描器】

【例子* ICMP PING等等】

【例子* ARP欺骗】

网络爬虫

HTTP服务器

线程池,进程池

 

 

 

 

 

你可能感兴趣的:(网络编程)