José Manuel Ortega:对于初学者来说,最常见的问题与套接字的实用程序有关,在高层次来看,我们在编程语言(例如Python和C / C ++)中可使用哪些库,而在较低层次上,则涉及操作系统如何使用它用于应用程序间的通信。
最后,我认为这并不会在很大程度上取决所使用的库,具体取决于它们的编程语言或操作系统。最终,这更多地取决于人们对于网络和安全概念的理解,以及如何在无需了解库或特定语言的情况下解决特定问题。
库和Python这样的语言,可以帮助你找到解决方案,但它们本身并不能为你提供解决方案,因为你需要了解网络以及协议和操作系统的基本工作原理。然后再学习某种库或编程语言,这并不是最重要的事情。
如果有人更具体地询问我有关Python中使用的库的信息,我将推荐我在书中分析的那些库。根据你最喜欢的语言,你会有不同的选择,我建议你尝试使用其他具有更好性能的语言,例如C / C ++。
套接字编程对网络和安全的好处和挑战是什么?
Ortega:从网络的角度来看,我们可以使用套接字来部署客户端服务器应用程序-例如,聊天应用程序。从安全的角度来看,套接字在较低级别上用于确定计算机已打开的端口,而典型的端口扫描程序工具(例如Nmap)在较低级别上使用它们。它们也可以用于连接到外部服务器-通过使用反向Shell,这与我们使用SSH [Secure Socket Shell]命令的方式相同。
主要挑战在于,能否异步发出请求,例如,通过python-socketio项目,你可以部署客户端、应用程序和服务器,可与Python Web框架(例如Flask)集成。
对于传输控制协议(TCP)到用户数据报协议(UDP),套接字编程有什么不同?
Ortega:TCP和UDP之间的主要区别在于TCP是面向连接的。这意味着它可以保证我们的数据包将到达目的地,并在数据包传递失败时发出错误通知。另一方面,UDP则适用于需要高效通信且不必担心数据包丢失的应用程序。
在Python中使用TCP和UDP的主要区别在于,创建套接字时,必须将SOCK_DGRAM用于UDP,将SOCK_STREAM用于TCP。
为什么网络专业人员应该使用Python进行套接字编程而不是另一种语言?
Ortega:Python提供所需的套接字模块,以在高级别和低级别使用套接字。套接字模块提供所有必需的功能,可以快速编写TCP和UDP客户端和服务器。
Python还提供其他工具,用于处理网络数据包,例如Scapy,它是用Python编写的模块,用于处理支持多种网络协议的数据包。该工具允许创建和修改各种类型的网络数据包,实现捕获和嗅探数据包的功能。
此外,如果我们将其与C / C ++之类的程序进行比较,其学习曲线也很低。